shjung 3 年之前
父节点
当前提交
d457807841
共有 25 个文件被更改,包括 784 次插入1559 次删除
  1. 23 1
      pom.xml
  2. 5 2
      src/main/java/com/its/traf/TrafPrcsServerApplication.java
  3. 29 1
      src/main/java/com/its/traf/controller/its/TrafPrcs05MPrepareController.java
  4. 21 2
      src/main/java/com/its/traf/global/AppRepository.java
  5. 0 60
      src/main/java/com/its/traf/ui/CtlrSttsTableCellRenderer.java
  6. 0 177
      src/main/java/com/its/traf/ui/CtlrSttsTableModel.java
  7. 49 160
      src/main/java/com/its/traf/ui/MainUI.form
  8. 166 349
      src/main/java/com/its/traf/ui/MainUI.java
  9. 0 93
      src/main/java/com/its/traf/ui/MonitoringTask.java
  10. 0 266
      src/main/java/com/its/traf/ui/SubUI.form
  11. 0 371
      src/main/java/com/its/traf/ui/SubUI.java
  12. 0 37
      src/main/java/com/its/traf/ui/SubUIController.java
  13. 31 0
      src/main/java/com/its/traf/ui/TrafPrcsTableCellRenderer.java
  14. 147 0
      src/main/java/com/its/traf/ui/TrafPrcsTableModel.java
  15. 31 0
      src/main/java/com/its/traf/ui/TrafStatTableCellRenderer.java
  16. 147 0
      src/main/java/com/its/traf/ui/TrafStatTableModel.java
  17. 8 0
      src/main/java/com/its/traf/vo/TrafJobType.java
  18. 43 0
      src/main/java/com/its/traf/vo/TrafPrcsVo.java
  19. 43 0
      src/main/java/com/its/traf/vo/TrafStatVo.java
  20. 2 1
      src/main/resources/application-dev.yml
  21. 1 1
      src/main/resources/application.yml
  22. 36 36
      src/main/resources/logback-spring.xml
  23. 2 2
      src/main/resources/mybatis/mapper/its/RoadMapper.xml
  24. 二进制
      src/main/resources/static/image/application.png
  25. 二进制
      src/main/resources/static/image/application2.png

+ 23 - 1
pom.xml

@@ -37,7 +37,7 @@
         <jackson.version>2.13.1</jackson.version>
         <!--main 함수가 있는 class 경로-->
         <start-class>com.its.traf.TrafPrcsServerApplication</start-class>
-        <webapp.lib>C:\DEV\ITS\01.WINDOWS\22.07.PyeongTaek\JAVA\repository</webapp.lib>
+        <webapp.lib>C:\java\repository</webapp.lib>
         <maven.test.skip>true</maven.test.skip>
     </properties>
 
@@ -150,6 +150,28 @@
             <systemPath>${webapp.lib}/ojdbc7-12.1.0.2.jar</systemPath>
         </dependency>
 
+<!--        <dependency>-->
+<!--            <groupId>com.oracle.database.jdbc</groupId>-->
+<!--            <artifactId>ojdbc8</artifactId>-->
+<!--            <version>19.3.0.0</version>-->
+<!--            <scope>system</scope>-->
+<!--            <systemPath>${webapp.lib}/ojdbc8.jar</systemPath>-->
+<!--        </dependency>-->
+<!--        <dependency>-->
+<!--            <groupId>com.oracle.ojdbc</groupId>-->
+<!--            <artifactId>orai18n</artifactId>-->
+<!--            <version>19.3.0.0</version>-->
+<!--            <scope>system</scope>-->
+<!--            <systemPath>${webapp.lib}/orai18n.jar</systemPath>-->
+<!--        </dependency>-->
+
+<!--        <dependency>-->
+<!--            <groupId>com.oracle.ojdbc</groupId>-->
+<!--            <artifactId>orai18n</artifactId>-->
+<!--            <version>19.3.0.0</version>-->
+<!--            <systemPath>${webapp.lib}/tibero6-jdbc-14.jar</systemPath>-->
+<!--        </dependency>-->
+
         <dependency>
             <groupId>tibero6</groupId>
             <artifactId>tibero6-jdbc</artifactId>

+ 5 - 2
src/main/java/com/its/traf/TrafPrcsServerApplication.java

@@ -6,6 +6,7 @@ import com.its.traf.config.AppUtils;
 import com.its.traf.config.ProcessConfig;
 import com.its.traf.controller.its.TrafPrcs05MController;
 import com.its.traf.controller.its.TrafPrcs05MPrepareController;
+import com.its.traf.global.AppRepository;
 import com.its.traf.process.DbmsDataProcess;
 import com.its.traf.service.its.UnitSystService;
 import com.its.traf.ui.JTextAreaOutputStream;
@@ -52,7 +53,7 @@ public class TrafPrcsServerApplication implements CommandLineRunner, Application
             log.error("Program Already Running.....");
         }
 
-        if (!OS.isWindows()) {
+        if (OS.isWindows()) {
             ApplicationContext context = new SpringApplicationBuilder(TrafPrcsServerApplication.class)
                     //.web(WebApplicationType.NONE)
                     .listeners(new ApplicationPidFileWriter("./conf/" + applicationName + ".pid"))
@@ -88,6 +89,8 @@ public class TrafPrcsServerApplication implements CommandLineRunner, Application
         log.info("************************************************************************************");
 
         // init application
+        AppRepository.getInstance().initMap();
+
         DbmsDataProcess dbmsDataProcess = (DbmsDataProcess)AppUtils.getBean(DbmsDataProcess.class);
         dbmsDataProcess.run();
 
@@ -106,7 +109,7 @@ public class TrafPrcsServerApplication implements CommandLineRunner, Application
         // schedule enable
         processConfig.setStartSchedule(true);
 
-        if (!OS.isWindows()) {
+        if (OS.isWindows()) {
             SwingUtilities.invokeLater(() -> {
                 String sysTime = SysUtils.getSysTimeStr();
                 //JFrame.setDefaultLookAndFeelDecorated(true);

+ 29 - 1
src/main/java/com/its/traf/controller/its/TrafPrcs05MPrepareController.java

@@ -1,7 +1,10 @@
 package com.its.traf.controller.its;
 
-import com.its.traf.service.its.TbPtrnIfsc15MService;
+import com.its.traf.global.AppRepository;
 import com.its.traf.service.its.*;
+import com.its.traf.ui.MainUI;
+import com.its.traf.vo.TrafJobType;
+import com.its.traf.vo.TrafPrcsVo;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Controller;
@@ -48,33 +51,58 @@ public class TrafPrcs05MPrepareController implements AbstractTrafPrcsController
          * 파라미터 정보 로딩
          * 수집시스템정보, 휴일정보, 구간소통등급정보, VMS 정보제공구간 소틍등급, 링크 가공 파라미터정보
          */
+        TrafPrcsVo paraVo = AppRepository.getInstance().getPrcsMap().get(TrafJobType.LOAD_PARAMETER.ordinal());
+        if (paraVo != null) {
+            paraVo.startTime();
+        }
         this.clctSystStupService.load();
         this.hldyInfrService.load();
         this.sectGradService.load();
         this.vmsIfscCmtrGradService.load();
         this.linkParaSetupService.load();
+        if (paraVo != null) {
+            paraVo.endTime(this.clctSystStupService.count() + this.hldyInfrService.count() + this.sectGradService.count() + this.vmsIfscCmtrGradService.count() + this.linkParaSetupService.count());
+        }
 
         /*
          * 기초 정보 로딩
          * 링크, 정보제공구간, 도로, VMS 정보제공구간, 동질구간, 정보가공제외구간
          */
+        TrafPrcsVo baseVo = AppRepository.getInstance().getPrcsMap().get(TrafJobType.LOAD_BASEDATA.ordinal());
+        if (baseVo != null) {
+            baseVo.startTime();
+        }
         this.linkService.load();
         this.ifscService.load();
         this.roadService.load();
         this.vmsIfscService.load();
         this.eqtySectService.load();
         this.incdRstrSectService.load();    // 돌발발생 통제구간으로 소통정보 생성하지 않음.
+        if (baseVo != null) {
+            baseVo.endTime(this.linkService.count() + this.ifscService.count() + this.roadService.count() + this.vmsIfscService.count() + this.eqtySectService.count() + this.incdRstrSectService.count());
+        }
 
         /*
          * 패턴정보 로딩
          * LINK 5M, LINK 15M, IFSC 5M, ROAD 5M
          */
+        TrafPrcsVo ptrnVo = AppRepository.getInstance().getPrcsMap().get(TrafJobType.LOAD_PATTERN.ordinal());
+        if (ptrnVo != null) {
+            ptrnVo.startTime();
+        }
         this.ptrnLink05MService.load();
         this.ptrnLink15MService.load();
         this.ptrnIfsc05MService.load();
         this.ptrnIfsc15MService.load();
         this.ptrnRoad05MService.load();
         this.ptrnRoad15MService.load();
+        if (ptrnVo != null) {
+            ptrnVo.endTime(this.ptrnLink05MService.count() + this.ptrnLink15MService.count() + this.ptrnIfsc05MService.count() + this.ptrnIfsc15MService.count() + this.ptrnRoad05MService.count() + this.ptrnRoad15MService.count());
+        }
 
+        MainUI UI = MainUI.getInstance();
+        if (UI != null) {
+            UI.updateTrafPrcs();
+        }
     }
 }

+ 21 - 2
src/main/java/com/its/traf/global/AppRepository.java

@@ -1,6 +1,8 @@
 package com.its.traf.global;
 
-import com.its.traf.entity.TrafPrcsInfr;
+import com.its.traf.vo.TrafJobType;
+import com.its.traf.vo.TrafPrcsVo;
+import com.its.traf.vo.TrafStatVo;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.extern.slf4j.Slf4j;
@@ -13,7 +15,9 @@ import java.util.concurrent.ConcurrentHashMap;
 public class AppRepository {
     private static AppRepository _instance = null;
 
-    public ConcurrentHashMap<Integer, TrafPrcsInfr> prcsMap = null;
+    public ConcurrentHashMap<Integer, TrafPrcsVo> prcsMap = null;
+    public ConcurrentHashMap<Integer, TrafStatVo> statMap = null;
+
     public static AppRepository getInstance() {
         if (_instance == null) {
             synchronized (AppRepository.class) {
@@ -26,6 +30,21 @@ public class AppRepository {
 
     public AppRepository() {
         this.prcsMap = new ConcurrentHashMap<>();
+        this.statMap = new ConcurrentHashMap<>();
+    }
+
+    public void initMap() {
+        initPrcsMap();
+        initStatMap();
     }
 
+    private void initPrcsMap() {
+        int idx = 0;
+        this.prcsMap.put(TrafJobType.LOAD_PARAMETER.ordinal(), new TrafPrcsVo(idx++, "파리미터 로딩", "CLCT_SYST_STUP,HLDY_INFR,SECT_GRAD,VMS_IFSC_CMTR_GRAD,LINK_PARA_STUP"));
+        this.prcsMap.put(TrafJobType.LOAD_BASEDATA.ordinal(), new TrafPrcsVo(idx++, "기초정보 로딩", "LINK,IFSC,ROAD,VMS_IFSC,EQTY_SECT,INCD_RSTR_SECT"));
+        this.prcsMap.put(TrafJobType.LOAD_PATTERN.ordinal(), new TrafPrcsVo(idx++, "패턴정보 로딩", "LINK05,IFSC05,ROAD05,LINK15,IFSC15,ROAD15"));
+    }
+    private void initStatMap() {
+
+    }
 }

+ 0 - 60
src/main/java/com/its/traf/ui/CtlrSttsTableCellRenderer.java

@@ -1,60 +0,0 @@
-package com.its.traf.ui;
-
-import javax.swing.*;
-import javax.swing.table.DefaultTableCellRenderer;
-import java.awt.*;
-
-public class CtlrSttsTableCellRenderer extends DefaultTableCellRenderer {
-
-    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
-
-        Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
-        String commStts = table.getModel().getValueAt(row, 6).toString();
-        if (commStts.equals("Connect")) {
-            cell.setBackground(new Color(255, 255, 255, 255));
-            if (column == 7) {
-                String door = table.getModel().getValueAt(row, 7).toString();
-                if (door.equals("열림")) {
-                    cell.setBackground(new Color(255, 0, 0, 176));
-                    cell.setForeground(new Color(255, 255, 255, 255));
-                }
-            }
-            if (column == 8) {
-                String fan = table.getModel().getValueAt(row, 8).toString();
-                if (fan.equals("가동")) {
-                    cell.setBackground(new Color(255, 213, 0, 250));
-                    cell.setForeground(new Color(0, 0, 0, 255));
-                }
-            }
-            if (column == 9) {
-                String heater = table.getModel().getValueAt(row, 9).toString();
-                if (heater.equals("가동")) {
-                    cell.setBackground(new Color(255, 213, 0, 250));
-                    cell.setForeground(new Color(0, 0, 0, 255));
-                }
-            }
-            if (column == 11) {
-                String video = table.getModel().getValueAt(row, 11).toString();
-                if (video.equals("이상")) {
-                    cell.setBackground(new Color(255, 213, 0, 250));
-                    cell.setForeground(new Color(0, 0, 0, 255));
-                }
-            }
-        } else if (commStts.equals("Login")) {
-            cell.setBackground(new Color(182, 175, 97, 176));
-        } else {
-            cell.setBackground(new Color(182, 97, 97, 176));
-        }
-
-        if (column != 3 && column != 4) {
-            setHorizontalAlignment(SwingConstants.CENTER);
-        } else {
-            setHorizontalAlignment(SwingConstants.LEFT);
-        }
-        if (column == 0) {
-            cell.setBackground(Color.LIGHT_GRAY);
-        }
-
-        return cell;
-    }
-}

+ 0 - 177
src/main/java/com/its/traf/ui/CtlrSttsTableModel.java

@@ -1,177 +0,0 @@
-package com.its.traf.ui;
-
-import com.its.traf.entity.TrafPrcsInfr;
-import lombok.extern.slf4j.Slf4j;
-
-import javax.swing.table.AbstractTableModel;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-@Slf4j
-public class CtlrSttsTableModel extends AbstractTableModel {
-    private static final long serialVersionUID = 1331132425472559704L;
-
-    private List<TrafPrcsInfr> ctlrList = Collections.synchronizedList(new ArrayList<TrafPrcsInfr>());
-    private final String[] columnNames = {
-            "#",
-            "번호",
-            "RSE ID",
-            "명칭",
-            "IP",
-            "PORT",
-            "연결상태",
-            "장치상태",
-            "ATN-1",
-            "ATN-2",
-            "ATN-3",
-            "ATN-4",
-            "연결 시각",
-            "연결종료 시각"
-    };
-    public static final String[] netStateStr = {
-            "Close", "Login", "Connect",
-    };
-
-    public CtlrSttsTableModel(List<TrafPrcsInfr> ctlrList) {
-        this.ctlrList = ctlrList;
-
-        int indexCount = 1;
-        for (TrafPrcsInfr obj : ctlrList) {
-            obj.setIndex(indexCount++);
-        }
-    }
-
-    @Override
-    public int getColumnCount() {
-        return columnNames.length;
-    }
-
-    @Override
-    public int getRowCount() {
-        int size = 0;
-        synchronized (this.ctlrList) {
-            size = this.ctlrList.size();
-        }
-        return size;
-    }
-
-    @Override
-    public String getColumnName(int columnIndex) {
-        if (columnIndex < columnNames.length) {
-            return columnNames[columnIndex];
-        }
-        return super.getColumnName(columnIndex);
-    }
-
-    @Override
-    public Class<?> getColumnClass(int columnIndex) {
-        if (ctlrList.isEmpty()) {
-            return Object.class;
-        }
-        return getValueAt(0, columnIndex).getClass();
-    }
-
-    public TrafPrcsInfr getControllerInfo(int row) {
-        TrafPrcsInfr info = this.ctlrList.get(row);
-        return info;
-    }
-
-    @Override
-    public Object getValueAt(int rowIndex, int columnIndex) {
-        Object returnValue = null;
-        synchronized (this.ctlrList) {
-            TrafPrcsInfr info = this.ctlrList.get(rowIndex);
-            if (info == null) {
-                return "";
-            }
-
-            int netState = 0;//info.getNetState();
-//            TbRseCtlrStts stts = info.getStts();
-//            String devStts = "-";
-//            String antena1 = "-";
-//            String antena2 = "-";
-//            String antena3 = "-";
-//            String antena4 = "-";
-//            if ("CMS0".equals(stts.getCMNC_STTS_CD())) {
-//               switch(Integer.parseInt(stts.getCNTL_DEVC_STTS())) {
-//                   case 0: devStts = "정상"; break;
-//                   case 1: devStts = "문열림"; break;
-//                   case 2: devStts = "팬동작"; break;
-//                   case 3: devStts = "온도이상"; break;
-//                   case 4: devStts = "정보없음"; break;
-//                   default: devStts = stts.getCNTL_DEVC_STTS(); break;
-//                }
-//                antena1 = stts.getATN_1_STTS();
-//                antena2 = stts.getATN_2_STTS();
-//                antena3 = stts.getATN_3_STTS();
-//                antena4 = stts.getATN_4_STTS();
-//            }
-//            switch (columnIndex) {
-//                case 0:
-//                    returnValue = info.getIndex();
-//                    break;
-//                case 1:
-//                    returnValue = info.getID();
-//                    break;
-//                case 2:
-//                    returnValue = info.getRSE_ID();
-//                    break;
-//                case 3:
-//                    returnValue = " " + info.getRSE_NM();
-//                    break;
-//                case 4:
-//                    returnValue = info.getRSE_CTLR_IP();
-//                    break;
-//                case 5:
-//                    returnValue = String.valueOf(info.getRSE_CTLR_PORT());
-//                    break;
-//                case 6:
-//                    returnValue = netStateStr[netState];
-//                    break;
-//                case  7: returnValue = devStts; break;
-//                case  8: returnValue = antena1; break;
-//                case  9: returnValue = antena2; break;
-//                case 10: returnValue = antena3; break;
-//                case 11: returnValue = antena4; break;
-//                case 12:
-//                    returnValue = info.getConnectTm();
-//                    break;
-//                case 13:
-//                    returnValue = info.getDisConnectTm();
-//                    break;
-//            }
-        }
-        return returnValue;
-    }
-
-    @Override
-    public void setValueAt(Object value, int rowIndex, int columnIndex) {
-        synchronized (this.ctlrList) {
-            TrafPrcsInfr obj = ctlrList.get(rowIndex);
-            if (columnIndex == 0) {
-                obj.setIndex((int) value);
-            }
-        }
-    }
-    public void setValueAt(TrafPrcsInfr obj, int rowIdx, int colIdx) {
-        synchronized (this.ctlrList) {
-        }
-        fireTableCellUpdated(rowIdx, colIdx);
-        fireTableDataChanged();
-    }
-
-    public void Add(TrafPrcsInfr info) {
-        int index = 0;
-        synchronized (this.ctlrList) {
-            index = this.ctlrList.size();
-            this.ctlrList.add(info);
-        }
-        fireTableRowsInserted(index, index);
-    }
-
-    public void setValue(TrafPrcsInfr obj, int viewRow, int modelRow) {
-        fireTableDataChanged();
-    }
-
-}

+ 49 - 160
src/main/java/com/its/traf/ui/MainUI.form

@@ -8,7 +8,7 @@
     <properties/>
     <border type="none"/>
     <children>
-      <grid id="d0095" binding="pnlCtlr" layout-manager="GridLayoutManager" row-count="3" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
+      <grid id="d0095" binding="pnlCtlr" layout-manager="GridLayoutManager" row-count="1" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
         <margin top="10" left="4" bottom="0" right="4"/>
         <constraints>
           <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="7" hsize-policy="7" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
@@ -16,180 +16,69 @@
         <properties/>
         <border type="none"/>
         <children>
-          <grid id="d1b2f" binding="pnlCtlrTitle" layout-manager="GridLayoutManager" row-count="1" column-count="6" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
-            <margin top="0" left="0" bottom="0" right="2"/>
+          <tabbedpane id="37625" binding="tabInfo">
             <constraints>
-              <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
-            </constraints>
-            <properties/>
-            <border type="none"/>
-            <children>
-              <component id="25222" class="javax.swing.JLabel">
-                <constraints>
-                  <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
-                </constraints>
-                <properties>
-                  <font name="Malgun Gothic" size="12" style="0"/>
-                  <horizontalAlignment value="2"/>
-                  <horizontalTextPosition value="11"/>
-                  <icon value="static/image/controller.png"/>
-                  <text value="RSE 정보"/>
-                </properties>
-              </component>
-              <hspacer id="e90f6">
-                <constraints>
-                  <grid row="0" column="1" row-span="1" col-span="1" vsize-policy="1" hsize-policy="6" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
-                </constraints>
-              </hspacer>
-              <component id="c9b9" class="javax.swing.JLabel">
-                <constraints>
-                  <grid row="0" column="2" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
-                </constraints>
-                <properties>
-                  <font name="Malgun Gothic" size="12" style="0"/>
-                  <text value="RSE 전체: "/>
-                </properties>
-              </component>
-              <component id="20b88" class="javax.swing.JLabel">
-                <constraints>
-                  <grid row="0" column="4" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
-                </constraints>
-                <properties>
-                  <font name="Malgun Gothic" size="12" style="0"/>
-                  <text value="통신 이상: "/>
-                </properties>
-              </component>
-              <component id="baf10" class="javax.swing.JLabel" binding="lblTotal">
-                <constraints>
-                  <grid row="0" column="3" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
-                </constraints>
-                <properties>
-                  <font name="Malgun Gothic" size="12" style="1"/>
-                  <horizontalAlignment value="0"/>
-                  <horizontalTextPosition value="0"/>
-                  <text value="   -"/>
-                </properties>
-              </component>
-              <component id="1c841" class="javax.swing.JLabel" binding="lblError">
-                <constraints>
-                  <grid row="0" column="5" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
-                </constraints>
-                <properties>
-                  <font name="Malgun Gothic" size="12" style="1"/>
-                  <foreground color="-65536"/>
-                  <horizontalAlignment value="0"/>
-                  <horizontalTextPosition value="0"/>
-                  <text value="   -"/>
-                </properties>
-              </component>
-            </children>
-          </grid>
-          <scrollpane id="b21be">
-            <constraints>
-              <grid row="1" column="0" row-span="1" col-span="1" vsize-policy="7" hsize-policy="7" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
-            </constraints>
-            <properties/>
-            <border type="none"/>
-            <children>
-              <component id="a0dd1" class="javax.swing.JTable" binding="tblCtlrList">
-                <constraints/>
-                <properties>
-                  <font name="Malgun Gothic" size="12" style="0"/>
-                </properties>
-              </component>
-            </children>
-          </scrollpane>
-          <grid id="17544" binding="pnlControl" layout-manager="GridLayoutManager" row-count="1" column-count="8" same-size-horizontally="false" same-size-vertically="false" hgap="1" vgap="1">
-            <margin top="0" left="0" bottom="0" right="2"/>
-            <constraints>
-              <grid row="2" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
+              <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false">
+                <preferred-size width="200" height="200"/>
+              </grid>
             </constraints>
-            <properties/>
+            <properties>
+              <font name="Malgun Gothic" size="12" style="0"/>
+            </properties>
             <border type="none"/>
             <children>
-              <component id="660a8" class="javax.swing.JButton" binding="btnImage">
-                <constraints>
-                  <grid row="0" column="7" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
-                </constraints>
-                <properties>
-                  <font name="Malgun Gothic" size="12" style="0"/>
-                  <text value="정지영상"/>
-                </properties>
-              </component>
-              <hspacer id="60c19">
-                <constraints>
-                  <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="1" hsize-policy="6" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
-                </constraints>
-              </hspacer>
-              <component id="3d84f" class="javax.swing.JButton" binding="btnInitialize">
-                <constraints>
-                  <grid row="0" column="6" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
-                </constraints>
-                <properties>
-                  <font name="Malgun Gothic" size="12" style="0"/>
-                  <text value="초기화"/>
-                </properties>
-              </component>
-              <component id="7c99b" class="javax.swing.JButton" binding="btnReset">
+              <grid id="37c44" binding="tabPrcs" layout-manager="GridLayoutManager" row-count="1" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
+                <margin top="0" left="0" bottom="0" right="0"/>
                 <constraints>
-                  <grid row="0" column="5" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
+                  <tabbedpane title="  교통정보가공  "/>
                 </constraints>
                 <properties>
                   <font name="Malgun Gothic" size="12" style="0"/>
-                  <text value="리셋"/>
                 </properties>
-              </component>
-              <component id="a85f9" class="javax.swing.JButton" binding="btnDisconnect">
-                <constraints>
-                  <grid row="0" column="4" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
-                </constraints>
-                <properties>
-                  <font name="Malgun Gothic" size="12" style="0"/>
-                  <text value="연결끊기"/>
-                </properties>
-              </component>
-              <component id="a6a03" class="javax.swing.JTextField" binding="txtName">
-                <constraints>
-                  <grid row="0" column="3" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="1" indent="0" use-parent-layout="false">
-                    <minimum-size width="200" height="-1"/>
-                    <preferred-size width="200" height="-1"/>
-                    <maximum-size width="200" height="-1"/>
-                  </grid>
-                </constraints>
-                <properties>
-                  <editable value="false"/>
-                  <font name="Malgun Gothic" size="12" style="0"/>
-                  <horizontalAlignment value="2"/>
-                  <text value="RSE 명칭"/>
-                </properties>
-              </component>
-              <component id="6d1e0" class="javax.swing.JTextField" binding="txtId">
-                <constraints>
-                  <grid row="0" column="2" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="1" indent="0" use-parent-layout="false">
-                    <minimum-size width="130" height="-1"/>
-                    <preferred-size width="130" height="-1"/>
-                    <maximum-size width="130" height="-1"/>
-                  </grid>
-                </constraints>
-                <properties>
-                  <editable value="false"/>
-                  <font name="Malgun Gothic" size="12" style="0"/>
-                  <horizontalAlignment value="0"/>
-                  <text value="ID"/>
-                </properties>
-              </component>
-              <component id="7eb53" class="javax.swing.JLabel">
+                <border type="none"/>
+                <children>
+                  <scrollpane id="42fa4">
+                    <constraints>
+                      <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="7" hsize-policy="7" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
+                    </constraints>
+                    <properties/>
+                    <border type="none"/>
+                    <children>
+                      <component id="dfbfd" class="javax.swing.JTable" binding="listPrcs">
+                        <constraints/>
+                        <properties/>
+                      </component>
+                    </children>
+                  </scrollpane>
+                </children>
+              </grid>
+              <grid id="dca11" binding="tabStat" layout-manager="GridLayoutManager" row-count="1" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
+                <margin top="0" left="0" bottom="0" right="0"/>
                 <constraints>
-                  <grid row="0" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
+                  <tabbedpane title="  통계정보생성  "/>
                 </constraints>
                 <properties>
                   <font name="Malgun Gothic" size="12" style="0"/>
-                  <icon value="static/image/select.png"/>
-                  <text value="선택한 RSE  "/>
                 </properties>
-              </component>
+                <border type="none"/>
+                <children>
+                  <scrollpane id="86072">
+                    <constraints>
+                      <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="7" hsize-policy="7" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
+                    </constraints>
+                    <properties/>
+                    <border type="none"/>
+                    <children>
+                      <component id="6a99f" class="javax.swing.JTable" binding="listStat">
+                        <constraints/>
+                        <properties/>
+                      </component>
+                    </children>
+                  </scrollpane>
+                </children>
+              </grid>
             </children>
-          </grid>
+          </tabbedpane>
         </children>
       </grid>
       <grid id="1a658" binding="pnlLog" layout-manager="GridLayoutManager" row-count="2" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">

+ 166 - 349
src/main/java/com/its/traf/ui/MainUI.java

@@ -3,8 +3,11 @@ package com.its.traf.ui;
 import com.intellij.uiDesigner.core.GridConstraints;
 import com.intellij.uiDesigner.core.GridLayoutManager;
 import com.intellij.uiDesigner.core.Spacer;
-import com.its.traf.entity.TrafPrcsInfr;
 import com.its.app.utils.SysUtils;
+import com.its.traf.entity.TrafPrcsInfr;
+import com.its.traf.global.AppRepository;
+import com.its.traf.vo.TrafPrcsVo;
+import com.its.traf.vo.TrafStatVo;
 import com.sun.management.OperatingSystemMXBean;
 import lombok.Getter;
 import lombok.extern.slf4j.Slf4j;
@@ -13,7 +16,6 @@ import javax.swing.Timer;
 import javax.swing.*;
 import javax.swing.border.MatteBorder;
 import javax.swing.plaf.FontUIResource;
-import javax.swing.table.DefaultTableCellRenderer;
 import javax.swing.table.TableCellRenderer;
 import javax.swing.table.TableColumnModel;
 import javax.swing.text.StyleContext;
@@ -22,8 +24,6 @@ import java.awt.datatransfer.Clipboard;
 import java.awt.datatransfer.StringSelection;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
 import java.io.File;
 import java.io.IOException;
 import java.lang.management.ManagementFactory;
@@ -35,38 +35,34 @@ import java.util.*;
 public class MainUI {
     private static MainUI _instance = null;
 
-    private SubUIController subUIController = null;
     private JFrame jFrame = null;
     private final OperatingSystemMXBean osBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
     private Timer timer;
     private Long tick = Long.valueOf(0);
-    private TrafPrcsInfr selObj = null;
 
-    private CtlrSttsTableModel ctlrSttsTableModel = null;
-    private TableCellRenderer cellRenderer = new CtlrSttsTableCellRenderer();
+    private TrafPrcsTableModel trafPrcsTableModel = null;
+    private TrafStatTableModel trafStatTableModel = null;
+    private TableCellRenderer cellPrcsRender = new TrafPrcsTableCellRenderer();
+    private TableCellRenderer cellStatRender = new TrafStatTableCellRenderer();
 
     private JPanel rootPanel;
     private JPanel pnlCtlr;
     private JPanel pnlLog;
     private JPanel pnlLogTitle;
-    private JPanel pnlCtlrTitle;
     private JButton btnLogDirOpen;
     private JButton btnLogPause;
     private JCheckBox chkLogPause;
     private JLabel lblSystime;
     private JPanel pnlStatusBar;
-    private JTable tblCtlrList;
     private JTextArea taLog;
     private JButton btnLogCopy;
-    private JLabel lblTotal;
-    private JLabel lblError;
     private JLabel lblCpuRate;
     private JLabel lblMemoryUsage;
-    private JPanel pnlControl;
-    private JButton btnImage;
-    private JButton btnInitialize;
-    private JButton btnReset;
-    private JButton btnDisconnect;
+    private JTabbedPane tabInfo;
+    private JPanel tabPrcs;
+    private JTable listPrcs;
+    private JPanel tabStat;
+    private JTable listStat;
     private JTextField txtName;
     private JTextField txtId;
 
@@ -76,7 +72,6 @@ public class MainUI {
 
     public void displaySystime() {
         lblSystime.setText(" " + SysUtils.getSysTimeStr() + "  ");
-        updateCommSttsTotal();
     }
 
     public void displayResource() {
@@ -96,8 +91,6 @@ public class MainUI {
         this.jFrame = jFrame;
         if (_instance == null) {
             _instance = this;
-            subUIController = new SubUIController(jFrame);
-            subUIController.setVisible(false);
         }
 
         //osBean = ManagementFactory.getPlatformMXBean(OperatingSystemMXBean.class);
@@ -115,16 +108,6 @@ public class MainUI {
             taLog.setFont(d2font);
         }
 
-//        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
-//        String fontNames[] = ge.getAvailableFontFamilyNames();
-//        for (int ii = 0; ii < fontNames.length; ii++) {
-//            log.error("GraphicsEnvironment Fonts: {}", fontNames[ii]);
-//        }
-//        final Font fonts[] = GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts();
-//        for (Font font : fonts) {
-//            log.error("FONTS: {}", font);
-//        }
-
         displaySystime();
         displayResource();
         timer = new Timer(1000, new ActionListener() {
@@ -143,8 +126,6 @@ public class MainUI {
         btnLogDirOpen.setFocusable(false);
         btnLogCopy.setFocusable(false);
 
-        //initTblListUI();
-
         btnLogPause.addActionListener(new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent e) {
@@ -177,221 +158,124 @@ public class MainUI {
             }
         });
 
-        tblCtlrList.addMouseListener(new MouseAdapter() {
-            public void mouseClicked(MouseEvent me) {
-                // double click
-                if (me.getClickCount() == 2) {
-                    if (!updateControllerInfo()) {
-                        if (subUIController.isVisible()) {
-                            subUIController.setVisible(false);
-                        }
-                    }
-                }
-            }
-        });
-        btnDisconnect.addActionListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent e) {
-                controlController(1);
-            }
-        });
-        btnReset.addActionListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent e) {
-                controlController(2);
-            }
-        });
-        btnInitialize.addActionListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent e) {
-                controlController(3);
-            }
-        });
-        btnImage.addActionListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent e) {
-                controlController(4);
-            }
-        });
-    }
-
-    /**
-     * 제어기 명령 처리
-     *
-     * @param type
-     */
-    public void controlController(int type) {
-        if (selObj == null) {
-            JOptionPane.showMessageDialog(getRootPanel(), "제어기가 선택되지 않았습니다. 목록을 더블클릭하여 제어기를 선택하세요.", "제어기 선택", JOptionPane.ERROR_MESSAGE);
-            return;
-        }
-//        if (selObj.getNetState() == NET.CLOSED) {
-//            JOptionPane.showMessageDialog(getRootPanel(), "제어기가 현재 연결이 되어 있지 않습니다.", "제어기 연결 상태", JOptionPane.ERROR_MESSAGE);
-//            return;
-//        }
-        String message, title;
-        switch (type) {
-            case 1:
-                message = "제어기와의 연결을 종료 하시겠습니까?";
-                title = "제어기 연결 종료";
-                break;
-            case 2:
-                message = "제어기를 리셋 하시겠습니까?";
-                title = "제어기 리셋";
-                break;
-            case 3:
-                message = "제어기를 초기화 하시겠습니까?";
-                title = "제어기 초기화";
-                break;
-            case 4:
-                message = "제어기의 정지영상 정보를 요청하시겠습니까?";
-                title = "제어기 정지영상 요청";
-                break;
-            default:
-                return;
-        }
-        if (JOptionPane.showConfirmDialog(getRootPanel(), message, title, JOptionPane.YES_NO_OPTION) != 0) {
-            return;
-        }
-
-        boolean result = false;
-        switch (type) {
-            case 1:
-                result = false;//selObj.channelClose();
-                break;
-            case 2:
-                result = true;//selObj.reset();
-                break;
-//            case 3:
-//                result = false;//selObj.initialize();
-//                break;
-//            case 4:
-//                result = true;//selObj.stopImage((byte) 0x01);
-//                break;
-            default:
-                return;
-        }
-        if (!result) {
-            JOptionPane.showMessageDialog(getRootPanel(), "명령 전송이 실패 하였습니다.", title, JOptionPane.ERROR_MESSAGE);
-        }
     }
 
     public boolean updateControllerInfo() {
-        if (subUIController.isVisible()) {
-            subUIController.setVisible(false);
-        }
-
-        int row = tblCtlrList.getSelectedRow();
-        if (row < 0) {
-            return false;
-        }
-
-        txtId.setText("");
-        txtName.setText("");
-        CtlrSttsTableModel tableModel = (CtlrSttsTableModel) tblCtlrList.getModel();
-        selObj = tableModel.getControllerInfo(row);
-        if (selObj != null) {
-            //txtId.setText(selObj.getRSE_ID());
-            txtName.setText(selObj.getRSE_NM());
-
-            subUIController.updateInfo(selObj);
-            if (!subUIController.isVisible()) {
-                //subUIController.setVisible(true);
-            }
-            return true;
-        }
+//        int row = tblCtlrList.getSelectedRow();
+//        if (row < 0) {
+//            return false;
+//        }
+//
+//        txtId.setText("");
+//        txtName.setText("");
+//        TrafPrcsTableModel tableModel = (TrafPrcsTableModel) tblCtlrList.getModel();
+//        selObj = tableModel.getControllerInfo(row);
+//        if (selObj != null) {
+//            //txtId.setText(selObj.getRSE_ID());
+//            txtName.setText(selObj.getRSE_NM());
+//            return true;
+//        }
         return false;
     }
 
     /**
      * 목록 헤더 생성
      */
-    private void initTblListUI(List<TrafPrcsInfr> ctlrList) {
-
-        this.ctlrSttsTableModel = new CtlrSttsTableModel(ctlrList);
-        tblCtlrList.setModel(this.ctlrSttsTableModel);
-
-        tblCtlrList.getTableHeader().setOpaque(false);
-        tblCtlrList.getTableHeader().setBackground(Color.LIGHT_GRAY);
-        tblCtlrList.setRowMargin(1);
-        //tblCtlrList.setGridColor(Color.LIGHT_GRAY);
-        tblCtlrList.setRowHeight(tblCtlrList.getRowHeight() + 5);
-        //tblCtlrList.setRowSelectionAllowed(true);
-        //tblCtlrList.setColumnSelectionAllowed(false);
-
-        tblCtlrList.setBackground(Color.WHITE);
-        tblCtlrList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
-        //tblCtlrList.setAutoCreateRowSorter(true); // sorting
-
-        //tblCtlrList.addMouseListener(new ListMouseListener(null));
-
-        TableColumnModel getColumnModel = tblCtlrList.getColumnModel();
-        getColumnModel.getColumn(0).setPreferredWidth(30);  //  "S",
-        getColumnModel.getColumn(1).setPreferredWidth(60);  //  "번호",
-        getColumnModel.getColumn(2).setPreferredWidth(140);  //  "시설물ID",
-        getColumnModel.getColumn(3).setPreferredWidth(210); //  "명칭",
-        getColumnModel.getColumn(4).setPreferredWidth(120); //  "IP",
-        //getColumnModel.getColumn(5).setPreferredWidth(0);  //  "PORT",
-        getColumnModel.getColumn(6).setPreferredWidth(70);  //  "연결상태",
-        getColumnModel.getColumn(7).setPreferredWidth(80); //  "장치상태",
-        getColumnModel.getColumn(8).setPreferredWidth(50);  //  "안테나1",
-        getColumnModel.getColumn(9).setPreferredWidth(50);  //  "안테나2",
-        getColumnModel.getColumn(10).setPreferredWidth(50); //  "안테나3",
-        getColumnModel.getColumn(11).setPreferredWidth(50); //  "안테나4",
-        getColumnModel.getColumn(12).setPreferredWidth(130);
-        getColumnModel.getColumn(13).setPreferredWidth(130);
+    private void initTblListUI(List<TrafPrcsVo> prcsList, List<TrafStatVo> statList) {
+        this.trafPrcsTableModel = new TrafPrcsTableModel(prcsList);
+        this.trafStatTableModel = new TrafStatTableModel(statList);
+        listPrcs.setModel(this.trafPrcsTableModel);
+        listStat.setModel(this.trafStatTableModel);
+
+        listPrcs.getTableHeader().setOpaque(false);
+        listPrcs.getTableHeader().setBackground(Color.LIGHT_GRAY);
+        listPrcs.setRowMargin(1);
+        listPrcs.setRowHeight(listPrcs.getRowHeight() + 5);
+
+        listPrcs.setBackground(Color.WHITE);
+        listPrcs.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+
+        TableColumnModel getColumnModel = listPrcs.getColumnModel();
+        getColumnModel.getColumn(0).setPreferredWidth(30);      //  "S",
+        getColumnModel.getColumn(1).setPreferredWidth(120);     //  "작업명",
+        getColumnModel.getColumn(2).setPreferredWidth(250);     //  "타겟",
+        getColumnModel.getColumn(3).setPreferredWidth(130);     //  "시작시각",
+        getColumnModel.getColumn(4).setPreferredWidth(130);     //  "종료시각",
+        getColumnModel.getColumn(5).setPreferredWidth(70);      //  "건수(EA)",
+        getColumnModel.getColumn(6).setPreferredWidth(70);      //  "작업시간(ms)",
+        getColumnModel.getColumn(7).setPreferredWidth(70);      //  "평균작업시간",
 
         getColumnModel.getColumn(0).setMaxWidth(30);
         getColumnModel.getColumn(0).setMinWidth(30);
         getColumnModel.getColumn(0).setResizable(false);
 
-        getColumnModel.getColumn(5).setMinWidth(0);
-        getColumnModel.getColumn(5).setMaxWidth(0);
-        getColumnModel.getColumn(5).setWidth(0);
-        getColumnModel.getColumn(5).setResizable(false);
-
         Color color = UIManager.getColor("Table.gridColor");
         MatteBorder border = new MatteBorder(1, 1, 0, 0, color);
-        tblCtlrList.setBorder(border);
-
-        DefaultTableCellRenderer centerAlign = new DefaultTableCellRenderer();
-        centerAlign.setHorizontalAlignment(JLabel.CENTER);
+        listPrcs.setBorder(border);
         for (int ii = 0; ii < getColumnModel.getColumnCount(); ii++) {
-            getColumnModel.getColumn(ii).setCellRenderer(cellRenderer);
+            getColumnModel.getColumn(ii).setCellRenderer(this.cellPrcsRender);
         }
-    }
 
-    public void updateCommSttsTotal() {
-        int ctlrTotal = 0;
-        int ctlrError = 0;
-//        for (Map.Entry<String, TbRseCtlr> e : AppRepository.getInstance().getCtlrMap().entrySet()) {
-//            TbRseCtlr obj = e.getValue();
-//            if (StringUtils.equals("N", obj.getDEL_YN())) {
-//                ctlrTotal++;
-//                if (!"CMS0".equals(obj.getStts().getCMNC_STTS_CD())) {
-//                    ctlrError++;
-//                }
-//            }
-//        }
-        lblTotal.setText(" " + ctlrTotal + " ");
-        lblError.setText(" " + ctlrError + " ");
+        listStat.getTableHeader().setOpaque(false);
+        listStat.getTableHeader().setBackground(Color.LIGHT_GRAY);
+        listStat.setRowMargin(1);
+        listStat.setRowHeight(listStat.getRowHeight() + 5);
+
+        listStat.setBackground(Color.WHITE);
+        listStat.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+
+        TableColumnModel getColumnModel_ = listStat.getColumnModel();
+        getColumnModel_.getColumn(0).setPreferredWidth(30);     //  "S",
+        getColumnModel_.getColumn(1).setPreferredWidth(120);    //  "작업명",
+        getColumnModel_.getColumn(2).setPreferredWidth(250);    //  "타겟",
+        getColumnModel_.getColumn(3).setPreferredWidth(130);    //  "시작시각",
+        getColumnModel_.getColumn(4).setPreferredWidth(130);    //  "종료시각",
+        getColumnModel_.getColumn(5).setPreferredWidth(70);     //  "건수(EA)",
+        getColumnModel_.getColumn(6).setPreferredWidth(70);     //  "작업시간(ms)",
+        getColumnModel_.getColumn(7).setPreferredWidth(70);     //  "평균작업시간",
+
+        getColumnModel_.getColumn(0).setMaxWidth(30);
+        getColumnModel_.getColumn(0).setMinWidth(30);
+        getColumnModel_.getColumn(0).setResizable(false);
+
+        listStat.setBorder(border);
+        for (int ii = 0; ii < getColumnModel_.getColumnCount(); ii++) {
+            getColumnModel_.getColumn(ii).setCellRenderer(this.cellStatRender);
+        }
     }
 
     public void LoadControllerInfo() {
-        SortedMap<Integer, TrafPrcsInfr> ctlrMap = new TreeMap<>();
-//        for (Map.Entry<String, TbRseCtlr> e : AppRepository.getInstance().getCtlrMap().entrySet()) {
-//            TbRseCtlr obj = e.getValue();
-//            if (StringUtils.equals("N", obj.getDEL_YN())) {
-//                ctlrMap.put(Integer.valueOf(obj.getID()), obj);
-//            }
-//        }
-        List<TrafPrcsInfr> ctlrList = new ArrayList<TrafPrcsInfr>(ctlrMap.values());
-        initTblListUI(ctlrList);
-        updateCommSttsTotal();
+        SortedMap<Integer, TrafPrcsVo> prcsMap = new TreeMap<>();
+        SortedMap<Integer, TrafStatVo> statMap = new TreeMap<>();
+        List<TrafPrcsVo> prcsList = new ArrayList<TrafPrcsVo>(AppRepository.getInstance().getPrcsMap().values());
+        List<TrafStatVo> statList = new ArrayList<TrafStatVo>(AppRepository.getInstance().getStatMap().values());
+        initTblListUI(prcsList, statList);
+    }
+
+    public void updateTrafPrcs() {
+        try {
+            TrafPrcsTableModel tableModel = (TrafPrcsTableModel) this.listPrcs.getModel();
+            if (tableModel != null) {
+                tableModel.fireTableDataChanged();
+            }
+        } catch (ClassCastException e) {
+            log.error("Cast updateTrafPrcs Error");
+        }
+    }
+
+    public void updateTrafStat() {
+        try {
+            TrafStatTableModel tableModel = (TrafStatTableModel) this.listStat.getModel();
+            if (tableModel != null) {
+                tableModel.fireTableDataChanged();
+            }
+        } catch (ClassCastException e) {
+            log.error("Cast updateTrafStat Error");
+        }
     }
 
     public void updateCtlrStts(TrafPrcsInfr obj) {
-        if (this.ctlrSttsTableModel == null) {
+        if (this.trafPrcsTableModel == null) {
             return;
         }
 //        for (int ii = 0; ii < this.ctlrSttsTableModel.getRowCount(); ii++) {
@@ -401,10 +285,10 @@ public class MainUI {
 //                break;
 //            }
 //        }
-        CtlrSttsTableModel tableModel = (CtlrSttsTableModel) tblCtlrList.getModel();
-        if (tableModel != null) {
-            tableModel.fireTableDataChanged();
-        }
+//        TrafPrcsTableModel tableModel = (TrafPrcsTableModel) tblCtlrList.getModel();
+//        if (tableModel != null) {
+//            tableModel.fireTableDataChanged();
+//        }
     }
 
     {
@@ -425,112 +309,45 @@ public class MainUI {
         rootPanel = new JPanel();
         rootPanel.setLayout(new GridLayoutManager(3, 1, new Insets(0, 0, 0, 0), -1, -1));
         pnlCtlr = new JPanel();
-        pnlCtlr.setLayout(new GridLayoutManager(3, 1, new Insets(10, 4, 0, 4), -1, -1));
+        pnlCtlr.setLayout(new GridLayoutManager(1, 1, new Insets(10, 4, 0, 4), -1, -1));
         rootPanel.add(pnlCtlr, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, null, null, null, 0, false));
-        pnlCtlrTitle = new JPanel();
-        pnlCtlrTitle.setLayout(new GridLayoutManager(1, 6, new Insets(0, 0, 0, 2), -1, -1));
-        pnlCtlr.add(pnlCtlrTitle, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false));
-        final JLabel label1 = new JLabel();
-        Font label1Font = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, label1.getFont());
-        if (label1Font != null) label1.setFont(label1Font);
-        label1.setHorizontalAlignment(2);
-        label1.setHorizontalTextPosition(11);
-        label1.setIcon(new ImageIcon(getClass().getResource("/static/image/controller.png")));
-        label1.setText("RSE 정보");
-        pnlCtlrTitle.add(label1, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
-        final Spacer spacer1 = new Spacer();
-        pnlCtlrTitle.add(spacer1, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, null, null, null, 0, false));
-        final JLabel label2 = new JLabel();
-        Font label2Font = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, label2.getFont());
-        if (label2Font != null) label2.setFont(label2Font);
-        label2.setText("RSE 전체: ");
-        pnlCtlrTitle.add(label2, new GridConstraints(0, 2, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
-        final JLabel label3 = new JLabel();
-        Font label3Font = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, label3.getFont());
-        if (label3Font != null) label3.setFont(label3Font);
-        label3.setText("통신 이상: ");
-        pnlCtlrTitle.add(label3, new GridConstraints(0, 4, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
-        lblTotal = new JLabel();
-        Font lblTotalFont = this.$$$getFont$$$("Malgun Gothic", Font.BOLD, 12, lblTotal.getFont());
-        if (lblTotalFont != null) lblTotal.setFont(lblTotalFont);
-        lblTotal.setHorizontalAlignment(0);
-        lblTotal.setHorizontalTextPosition(0);
-        lblTotal.setText("   -");
-        pnlCtlrTitle.add(lblTotal, new GridConstraints(0, 3, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
-        lblError = new JLabel();
-        Font lblErrorFont = this.$$$getFont$$$("Malgun Gothic", Font.BOLD, 12, lblError.getFont());
-        if (lblErrorFont != null) lblError.setFont(lblErrorFont);
-        lblError.setForeground(new Color(-65536));
-        lblError.setHorizontalAlignment(0);
-        lblError.setHorizontalTextPosition(0);
-        lblError.setText("   -");
-        pnlCtlrTitle.add(lblError, new GridConstraints(0, 5, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+        tabInfo = new JTabbedPane();
+        Font tabInfoFont = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, tabInfo.getFont());
+        if (tabInfoFont != null) tabInfo.setFont(tabInfoFont);
+        pnlCtlr.add(tabInfo, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, new Dimension(200, 200), null, 0, false));
+        tabPrcs = new JPanel();
+        tabPrcs.setLayout(new GridLayoutManager(1, 1, new Insets(0, 0, 0, 0), -1, -1));
+        Font tabPrcsFont = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, tabPrcs.getFont());
+        if (tabPrcsFont != null) tabPrcs.setFont(tabPrcsFont);
+        tabInfo.addTab("  교통정보가공  ", tabPrcs);
         final JScrollPane scrollPane1 = new JScrollPane();
-        pnlCtlr.add(scrollPane1, new GridConstraints(1, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, null, null, null, 0, false));
-        tblCtlrList = new JTable();
-        Font tblCtlrListFont = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, tblCtlrList.getFont());
-        if (tblCtlrListFont != null) tblCtlrList.setFont(tblCtlrListFont);
-        scrollPane1.setViewportView(tblCtlrList);
-        pnlControl = new JPanel();
-        pnlControl.setLayout(new GridLayoutManager(1, 8, new Insets(0, 0, 0, 2), 1, 1));
-        pnlCtlr.add(pnlControl, new GridConstraints(2, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false));
-        btnImage = new JButton();
-        Font btnImageFont = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, btnImage.getFont());
-        if (btnImageFont != null) btnImage.setFont(btnImageFont);
-        btnImage.setText("정지영상");
-        pnlControl.add(btnImage, new GridConstraints(0, 7, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
-        final Spacer spacer2 = new Spacer();
-        pnlControl.add(spacer2, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, null, null, null, 0, false));
-        btnInitialize = new JButton();
-        Font btnInitializeFont = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, btnInitialize.getFont());
-        if (btnInitializeFont != null) btnInitialize.setFont(btnInitializeFont);
-        btnInitialize.setText("초기화");
-        pnlControl.add(btnInitialize, new GridConstraints(0, 6, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
-        btnReset = new JButton();
-        Font btnResetFont = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, btnReset.getFont());
-        if (btnResetFont != null) btnReset.setFont(btnResetFont);
-        btnReset.setText("리셋");
-        pnlControl.add(btnReset, new GridConstraints(0, 5, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
-        btnDisconnect = new JButton();
-        Font btnDisconnectFont = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, btnDisconnect.getFont());
-        if (btnDisconnectFont != null) btnDisconnect.setFont(btnDisconnectFont);
-        btnDisconnect.setText("연결끊기");
-        pnlControl.add(btnDisconnect, new GridConstraints(0, 4, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
-        txtName = new JTextField();
-        txtName.setEditable(false);
-        Font txtNameFont = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, txtName.getFont());
-        if (txtNameFont != null) txtName.setFont(txtNameFont);
-        txtName.setHorizontalAlignment(2);
-        txtName.setText("RSE 명칭");
-        pnlControl.add(txtName, new GridConstraints(0, 3, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, new Dimension(200, -1), new Dimension(200, -1), new Dimension(200, -1), 0, false));
-        txtId = new JTextField();
-        txtId.setEditable(false);
-        Font txtIdFont = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, txtId.getFont());
-        if (txtIdFont != null) txtId.setFont(txtIdFont);
-        txtId.setHorizontalAlignment(0);
-        txtId.setText("ID");
-        pnlControl.add(txtId, new GridConstraints(0, 2, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, new Dimension(130, -1), new Dimension(130, -1), new Dimension(130, -1), 0, false));
-        final JLabel label4 = new JLabel();
-        Font label4Font = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, label4.getFont());
-        if (label4Font != null) label4.setFont(label4Font);
-        label4.setIcon(new ImageIcon(getClass().getResource("/static/image/select.png")));
-        label4.setText("선택한 RSE  ");
-        pnlControl.add(label4, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+        tabPrcs.add(scrollPane1, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, null, null, null, 0, false));
+        listPrcs = new JTable();
+        scrollPane1.setViewportView(listPrcs);
+        tabStat = new JPanel();
+        tabStat.setLayout(new GridLayoutManager(1, 1, new Insets(0, 0, 0, 0), -1, -1));
+        Font tabStatFont = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, tabStat.getFont());
+        if (tabStatFont != null) tabStat.setFont(tabStatFont);
+        tabInfo.addTab("  통계정보생성  ", tabStat);
+        final JScrollPane scrollPane2 = new JScrollPane();
+        tabStat.add(scrollPane2, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, null, null, null, 0, false));
+        listStat = new JTable();
+        scrollPane2.setViewportView(listStat);
         pnlLog = new JPanel();
         pnlLog.setLayout(new GridLayoutManager(2, 1, new Insets(0, 4, 0, 4), -1, -1));
         rootPanel.add(pnlLog, new GridConstraints(1, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, new Dimension(-1, 250), new Dimension(-1, 250), new Dimension(-1, 250), 0, false));
         pnlLogTitle = new JPanel();
         pnlLogTitle.setLayout(new GridLayoutManager(1, 6, new Insets(0, 0, 0, 2), 1, 1));
         pnlLog.add(pnlLogTitle, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false));
-        final JLabel label5 = new JLabel();
-        Font label5Font = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, label5.getFont());
-        if (label5Font != null) label5.setFont(label5Font);
-        label5.setHorizontalAlignment(2);
-        label5.setIcon(new ImageIcon(getClass().getResource("/static/image/logging.png")));
-        label5.setText("시스템 로그");
-        pnlLogTitle.add(label5, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
-        final Spacer spacer3 = new Spacer();
-        pnlLogTitle.add(spacer3, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, null, null, null, 0, false));
+        final JLabel label1 = new JLabel();
+        Font label1Font = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, label1.getFont());
+        if (label1Font != null) label1.setFont(label1Font);
+        label1.setHorizontalAlignment(2);
+        label1.setIcon(new ImageIcon(getClass().getResource("/static/image/logging.png")));
+        label1.setText("시스템 로그");
+        pnlLogTitle.add(label1, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+        final Spacer spacer1 = new Spacer();
+        pnlLogTitle.add(spacer1, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, null, null, null, 0, false));
         btnLogDirOpen = new JButton();
         Font btnLogDirOpenFont = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, btnLogDirOpen.getFont());
         if (btnLogDirOpenFont != null) btnLogDirOpen.setFont(btnLogDirOpenFont);
@@ -555,10 +372,10 @@ public class MainUI {
         if (btnLogCopyFont != null) btnLogCopy.setFont(btnLogCopyFont);
         btnLogCopy.setText("복사");
         pnlLogTitle.add(btnLogCopy, new GridConstraints(0, 4, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
-        final JScrollPane scrollPane2 = new JScrollPane();
-        Font scrollPane2Font = this.$$$getFont$$$("D2Coding", Font.PLAIN, 12, scrollPane2.getFont());
-        if (scrollPane2Font != null) scrollPane2.setFont(scrollPane2Font);
-        pnlLog.add(scrollPane2, new GridConstraints(1, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, null, null, null, 0, false));
+        final JScrollPane scrollPane3 = new JScrollPane();
+        Font scrollPane3Font = this.$$$getFont$$$("D2Coding", Font.PLAIN, 12, scrollPane3.getFont());
+        if (scrollPane3Font != null) scrollPane3.setFont(scrollPane3Font);
+        pnlLog.add(scrollPane3, new GridConstraints(1, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, null, null, null, 0, false));
         taLog = new JTextArea();
         taLog.setBackground(new Color(-16777216));
         taLog.setCaretColor(new Color(-1));
@@ -568,12 +385,12 @@ public class MainUI {
         taLog.setForeground(new Color(-1));
         taLog.setMargin(new Insets(4, 4, 4, 4));
         taLog.setText("[10:50:08.561] [ INFO] ************************************************************************************\n[10:50:08.561] [ INFO] **                   Center Communication Server Information                      **\n[10:50:08.561] [ INFO] **     bindAddress: 0.0.0.0\n[10:50:08.561] [ INFO] **      listenPort: 9901\n[10:50:08.561] [ INFO] **         backlog: 1024\n[10:50:08.561] [ INFO] **   acceptThreads: 16\n[10:50:08.561] [ INFO] **   workerThreads: 16\n[10:50:08.561] [ INFO] ************************************************************************************\n");
-        scrollPane2.setViewportView(taLog);
+        scrollPane3.setViewportView(taLog);
         pnlStatusBar = new JPanel();
         pnlStatusBar.setLayout(new GridLayoutManager(1, 7, new Insets(0, 4, 4, 4), -1, -1));
         rootPanel.add(pnlStatusBar, new GridConstraints(2, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false));
-        final Spacer spacer4 = new Spacer();
-        pnlStatusBar.add(spacer4, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, null, null, null, 0, false));
+        final Spacer spacer2 = new Spacer();
+        pnlStatusBar.add(spacer2, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, null, null, null, 0, false));
         lblSystime = new JLabel();
         Font lblSystimeFont = this.$$$getFont$$$("Malgun Gothic", Font.BOLD, 12, lblSystime.getFont());
         if (lblSystimeFont != null) lblSystime.setFont(lblSystimeFont);
@@ -581,10 +398,10 @@ public class MainUI {
         lblSystime.setHorizontalTextPosition(0);
         lblSystime.setText(" 2022-08-04 13:24:33 ");
         pnlStatusBar.add(lblSystime, new GridConstraints(0, 6, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
-        final JLabel label6 = new JLabel();
-        label6.setIcon(new ImageIcon(getClass().getResource("/static/image/on.png")));
-        label6.setText(" ");
-        pnlStatusBar.add(label6, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+        final JLabel label2 = new JLabel();
+        label2.setIcon(new ImageIcon(getClass().getResource("/static/image/on.png")));
+        label2.setText(" ");
+        pnlStatusBar.add(label2, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
         lblCpuRate = new JLabel();
         Font lblCpuRateFont = this.$$$getFont$$$("Malgun Gothic", Font.BOLD, 12, lblCpuRate.getFont());
         if (lblCpuRateFont != null) lblCpuRate.setFont(lblCpuRateFont);
@@ -599,20 +416,20 @@ public class MainUI {
         lblMemoryUsage.setHorizontalTextPosition(0);
         lblMemoryUsage.setText("    ");
         pnlStatusBar.add(lblMemoryUsage, new GridConstraints(0, 3, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, new Dimension(40, -1), new Dimension(40, -1), new Dimension(40, -1), 0, false));
-        final JLabel label7 = new JLabel();
-        Font label7Font = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, label7.getFont());
-        if (label7Font != null) label7.setFont(label7Font);
-        label7.setHorizontalAlignment(0);
-        label7.setHorizontalTextPosition(0);
-        label7.setText("  CPU 사용율(%):");
-        pnlStatusBar.add(label7, new GridConstraints(0, 4, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
-        final JLabel label8 = new JLabel();
-        Font label8Font = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, label8.getFont());
-        if (label8Font != null) label8.setFont(label8Font);
-        label8.setHorizontalAlignment(0);
-        label8.setHorizontalTextPosition(0);
-        label8.setText("  메모리 사용율(%):");
-        pnlStatusBar.add(label8, new GridConstraints(0, 2, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+        final JLabel label3 = new JLabel();
+        Font label3Font = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, label3.getFont());
+        if (label3Font != null) label3.setFont(label3Font);
+        label3.setHorizontalAlignment(0);
+        label3.setHorizontalTextPosition(0);
+        label3.setText("  CPU 사용율(%):");
+        pnlStatusBar.add(label3, new GridConstraints(0, 4, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+        final JLabel label4 = new JLabel();
+        Font label4Font = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, label4.getFont());
+        if (label4Font != null) label4.setFont(label4Font);
+        label4.setHorizontalAlignment(0);
+        label4.setHorizontalTextPosition(0);
+        label4.setText("  메모리 사용율(%):");
+        pnlStatusBar.add(label4, new GridConstraints(0, 2, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
     }
 
     /**

+ 0 - 93
src/main/java/com/its/traf/ui/MonitoringTask.java

@@ -1,93 +0,0 @@
-package com.its.traf.ui;
-
-import javax.swing.*;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-public class MonitoringTask {
-	
-	private static final int TASK_LENGTH = 1000;
-	private AtomicBoolean isStarted =  new AtomicBoolean(false);
-	private AtomicBoolean isRunning = new AtomicBoolean(false);
-	private AtomicBoolean isDone = new AtomicBoolean(false);
-	private int lengthOfTask;
-	private int current = 0;	
-	private String statMessage;
-
-	public MonitoringTask() {
-		lengthOfTask = TASK_LENGTH;
-	}
-
-	public void go() {
-		isRunning.set(true);
-		if (!isStarted.get()) {
-			isDone.set(false);
-			isStarted.set(true);
-			statMessage = null;
-			current = 0;
-			final SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>() {
-				@Override
-				protected Void doInBackground() throws Exception {
-					// Fake a long task, making a random amount of progress every second.
-					while (!isDone.get()) {
-						if (isRunning.get()) {
-							try {
-								Thread.sleep(1000); // sleep for a second
-								current += Math.random() * 100; // make some progress
-								if (current >= lengthOfTask) {
-									onDown();
-									current = lengthOfTask;
-								}
-								statMessage = "Completed " + current + " out of " + lengthOfTask + ".";
-							} catch (InterruptedException e) {
-								e.printStackTrace();
-							}
-						}
-					}
-					return null;
-				}
-			};
-			worker.execute();
-		}
-	}
-
-	public void pause() {
-		this.isRunning.set(false);
-	}
-
-	/**
-	 * Called from SwingTimerDemo to find out how much work needs to be done.
-	 */
-	public int getLengthOfTask() {
-		return lengthOfTask;
-	}
-
-	/**
-	 * Called from SwingTimerDemo to find out how much has been done.
-	 */
-	public int getCurrent() {
-		return current;
-	}
-
-	public void onDown() {
-		isDone.set(true);
-		isStarted.set(false);
-		isRunning.set(false);
-		statMessage = null;
-	}
-
-	/**
-	 * Called from SwingTimerDemo to find out if the task has completed.
-	 */
-	public boolean isDone() {
-		return isDone.get();
-	}
-
-	/**
-	 * Returns the most recent status message, or null if there is no current
-	 * status message.
-	 */
-	public String getMessage() {
-		return statMessage;
-	}
-
-}

+ 0 - 266
src/main/java/com/its/traf/ui/SubUI.form

@@ -1,266 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="com.its.traf.ui.SubUI">
-  <grid id="27dc6" binding="rootPanel" layout-manager="GridLayoutManager" row-count="2" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
-    <margin top="0" left="0" bottom="0" right="0"/>
-    <constraints>
-      <xy x="20" y="20" width="979" height="620"/>
-    </constraints>
-    <properties/>
-    <border type="none"/>
-    <children>
-      <grid id="d0095" binding="pnlCtlr" layout-manager="GridLayoutManager" row-count="2" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
-        <margin top="10" left="4" bottom="0" right="4"/>
-        <constraints>
-          <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
-        </constraints>
-        <properties/>
-        <border type="none"/>
-        <children>
-          <grid id="d1b2f" binding="pnlCtlrTitlex" layout-manager="GridLayoutManager" row-count="1" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
-            <margin top="0" left="0" bottom="0" right="2"/>
-            <constraints>
-              <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="1" hsize-policy="0" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
-            </constraints>
-            <properties/>
-            <border type="none"/>
-            <children>
-              <component id="25222" class="javax.swing.JLabel">
-                <constraints>
-                  <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
-                </constraints>
-                <properties>
-                  <font name="Malgun Gothic" size="12" style="0"/>
-                  <horizontalAlignment value="2"/>
-                  <horizontalTextPosition value="11"/>
-                  <icon value="static/image/controller.png"/>
-                  <text value="제어기 정보"/>
-                </properties>
-              </component>
-              <hspacer id="e90f6">
-                <constraints>
-                  <grid row="0" column="1" row-span="1" col-span="1" vsize-policy="1" hsize-policy="6" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
-                </constraints>
-              </hspacer>
-            </children>
-          </grid>
-          <grid id="17544" binding="pnlControl" layout-manager="GridLayoutManager" row-count="4" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="1" vgap="1">
-            <margin top="0" left="0" bottom="0" right="2"/>
-            <constraints>
-              <grid row="1" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
-            </constraints>
-            <properties/>
-            <border type="none"/>
-            <children>
-              <component id="a85f9" class="javax.swing.JButton" binding="btnDisconnect">
-                <constraints>
-                  <grid row="0" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
-                </constraints>
-                <properties>
-                  <font name="Malgun Gothic" size="12" style="0"/>
-                  <text value="연결끊기"/>
-                </properties>
-              </component>
-              <grid id="31344" layout-manager="GridLayoutManager" row-count="4" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
-                <margin top="0" left="0" bottom="0" right="0"/>
-                <constraints>
-                  <grid row="0" column="0" row-span="4" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
-                </constraints>
-                <properties/>
-                <border type="none"/>
-                <children>
-                  <component id="6d1e0" class="javax.swing.JTextField" binding="txtId">
-                    <constraints>
-                      <grid row="0" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="1" indent="0" use-parent-layout="false">
-                        <minimum-size width="100" height="-1"/>
-                        <preferred-size width="100" height="-1"/>
-                        <maximum-size width="100" height="-1"/>
-                      </grid>
-                    </constraints>
-                    <properties>
-                      <editable value="false"/>
-                      <font name="Malgun Gothic" size="12" style="0"/>
-                      <horizontalAlignment value="0"/>
-                      <text value="ID"/>
-                    </properties>
-                  </component>
-                  <component id="a6a03" class="javax.swing.JTextField" binding="txtName">
-                    <constraints>
-                      <grid row="1" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="6" anchor="8" fill="1" indent="0" use-parent-layout="false">
-                        <preferred-size width="200" height="-1"/>
-                      </grid>
-                    </constraints>
-                    <properties>
-                      <editable value="false"/>
-                      <font name="Malgun Gothic" size="12" style="0"/>
-                      <horizontalAlignment value="2"/>
-                      <text value="제어기 명칭"/>
-                    </properties>
-                  </component>
-                  <component id="a60a6" class="javax.swing.JLabel">
-                    <constraints>
-                      <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
-                    </constraints>
-                    <properties>
-                      <text value="ㅣ관리번호"/>
-                    </properties>
-                  </component>
-                  <component id="f96bf" class="javax.swing.JTextField" binding="textField1" default-binding="true">
-                    <constraints>
-                      <grid row="2" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="6" anchor="8" fill="1" indent="0" use-parent-layout="false">
-                        <preferred-size width="150" height="-1"/>
-                      </grid>
-                    </constraints>
-                    <properties/>
-                  </component>
-                  <component id="17549" class="javax.swing.JTextField" binding="textField2" default-binding="true">
-                    <constraints>
-                      <grid row="3" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="6" anchor="8" fill="1" indent="0" use-parent-layout="false">
-                        <preferred-size width="150" height="-1"/>
-                      </grid>
-                    </constraints>
-                    <properties/>
-                  </component>
-                </children>
-              </grid>
-              <component id="7c99b" class="javax.swing.JButton" binding="btnReset">
-                <constraints>
-                  <grid row="1" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
-                </constraints>
-                <properties>
-                  <font name="Malgun Gothic" size="12" style="0"/>
-                  <text value="리셋"/>
-                </properties>
-              </component>
-              <component id="3d84f" class="javax.swing.JButton" binding="btnInitialize">
-                <constraints>
-                  <grid row="3" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
-                </constraints>
-                <properties>
-                  <font name="Malgun Gothic" size="12" style="0"/>
-                  <text value="초기화"/>
-                </properties>
-              </component>
-              <component id="660a8" class="javax.swing.JButton" binding="btnImage">
-                <constraints>
-                  <grid row="2" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
-                </constraints>
-                <properties>
-                  <font name="Malgun Gothic" size="12" style="0"/>
-                  <text value="정지영상"/>
-                </properties>
-              </component>
-            </children>
-          </grid>
-          <grid id="62443" layout-manager="GridLayoutManager" row-count="1" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
-            <margin top="0" left="0" bottom="0" right="0"/>
-            <constraints>
-              <grid row="1" column="1" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
-            </constraints>
-            <properties/>
-            <border type="none"/>
-            <children/>
-          </grid>
-        </children>
-      </grid>
-      <grid id="1a658" binding="pnlLog" layout-manager="GridLayoutManager" row-count="2" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
-        <margin top="0" left="4" bottom="0" right="4"/>
-        <constraints>
-          <grid row="1" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="7" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
-        </constraints>
-        <properties/>
-        <border type="none"/>
-        <children>
-          <grid id="dbb05" binding="pnlLogTitle" layout-manager="GridLayoutManager" row-count="1" column-count="6" same-size-horizontally="false" same-size-vertically="false" hgap="1" vgap="1">
-            <margin top="0" left="0" bottom="0" right="2"/>
-            <constraints>
-              <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
-            </constraints>
-            <properties/>
-            <border type="none"/>
-            <children>
-              <component id="9ac90" class="javax.swing.JLabel">
-                <constraints>
-                  <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
-                </constraints>
-                <properties>
-                  <font name="Malgun Gothic" size="12" style="0"/>
-                  <horizontalAlignment value="2"/>
-                  <icon value="static/image/logging.png"/>
-                  <text value="제어기 로그"/>
-                </properties>
-              </component>
-              <hspacer id="656fd">
-                <constraints>
-                  <grid row="0" column="1" row-span="1" col-span="1" vsize-policy="1" hsize-policy="6" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
-                </constraints>
-              </hspacer>
-              <component id="df2a0" class="javax.swing.JButton" binding="btnLogDirOpen">
-                <constraints>
-                  <grid row="0" column="5" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="0" indent="0" use-parent-layout="false"/>
-                </constraints>
-                <properties>
-                  <font name="Malgun Gothic" size="12" style="0"/>
-                  <horizontalTextPosition value="0"/>
-                  <text value="로그 폴더"/>
-                </properties>
-              </component>
-              <component id="69a98" class="javax.swing.JButton" binding="btnLogPause">
-                <constraints>
-                  <grid row="0" column="3" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="0" indent="0" use-parent-layout="false"/>
-                </constraints>
-                <properties>
-                  <font name="Malgun Gothic" size="12" style="0"/>
-                  <horizontalTextPosition value="0"/>
-                  <text value="지우기"/>
-                </properties>
-              </component>
-              <component id="1e9e7" class="javax.swing.JCheckBox" binding="chkLogPause">
-                <constraints>
-                  <grid row="0" column="2" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
-                </constraints>
-                <properties>
-                  <font name="Malgun Gothic" size="12" style="0"/>
-                  <horizontalAlignment value="0"/>
-                  <horizontalTextPosition value="11"/>
-                  <text value="멈춤"/>
-                </properties>
-              </component>
-              <component id="ba97c" class="javax.swing.JButton" binding="btnLogCopy">
-                <constraints>
-                  <grid row="0" column="4" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="0" indent="0" use-parent-layout="false"/>
-                </constraints>
-                <properties>
-                  <font name="Malgun Gothic" size="12" style="0"/>
-                  <text value="복사"/>
-                </properties>
-              </component>
-            </children>
-          </grid>
-          <scrollpane id="a6866">
-            <constraints>
-              <grid row="1" column="0" row-span="1" col-span="1" vsize-policy="7" hsize-policy="7" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
-            </constraints>
-            <properties>
-              <font name="D2Coding" size="12" style="0"/>
-            </properties>
-            <border type="none"/>
-            <children>
-              <component id="8ce8a" class="javax.swing.JTextArea" binding="taLog">
-                <constraints/>
-                <properties>
-                  <background color="-16777216"/>
-                  <caretColor color="-1"/>
-                  <editable value="false"/>
-                  <font name="D2Coding" size="14" style="0"/>
-                  <foreground color="-1"/>
-                  <margin top="4" left="4" bottom="4" right="4"/>
-                  <text value="[10:50:08.561] [ INFO] ************************************************************************************&#10;[10:50:08.561] [ INFO] **                   Center Communication Server Information                      **&#10;[10:50:08.561] [ INFO] **     bindAddress: 0.0.0.0&#10;[10:50:08.561] [ INFO] **      listenPort: 9901&#10;[10:50:08.561] [ INFO] **         backlog: 1024&#10;[10:50:08.561] [ INFO] **   acceptThreads: 16&#10;[10:50:08.561] [ INFO] **   workerThreads: 16&#10;[10:50:08.561] [ INFO] ************************************************************************************&#10;"/>
-                </properties>
-              </component>
-            </children>
-          </scrollpane>
-        </children>
-      </grid>
-    </children>
-  </grid>
-</form>

+ 0 - 371
src/main/java/com/its/traf/ui/SubUI.java

@@ -1,371 +0,0 @@
-package com.its.traf.ui;
-
-import com.intellij.uiDesigner.core.GridConstraints;
-import com.intellij.uiDesigner.core.GridLayoutManager;
-import com.intellij.uiDesigner.core.Spacer;
-import com.its.traf.entity.TrafPrcsInfr;
-import com.sun.management.OperatingSystemMXBean;
-import lombok.Getter;
-import lombok.extern.slf4j.Slf4j;
-
-import javax.swing.*;
-import javax.swing.plaf.FontUIResource;
-import javax.swing.text.StyleContext;
-import java.awt.*;
-import java.awt.datatransfer.Clipboard;
-import java.awt.datatransfer.StringSelection;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.io.File;
-import java.io.IOException;
-import java.lang.management.ManagementFactory;
-import java.util.Locale;
-
-@Slf4j
-@Getter
-public abstract class SubUI {
-    OperatingSystemMXBean osBean = null;
-    private TrafPrcsInfr selObj = null;
-
-    private JPanel rootPanel;
-    private JPanel pnlCtlr;
-    private JPanel pnlLog;
-    private JPanel pnlLogTitle;
-    private JPanel pnlCtlrTitlex;
-    private JButton btnLogDirOpen;
-    private JButton btnLogPause;
-    private JCheckBox chkLogPause;
-    private JTextArea taLog;
-    private JButton btnLogCopy;
-    private JPanel pnlControl;
-    private JButton btnImage;
-    private JButton btnInitialize;
-    private JButton btnReset;
-    private JButton btnDisconnect;
-    private JTextField txtName;
-    private JTextField txtId;
-    private JTextField textField1;
-    private JTextField textField2;
-
-    protected abstract void actionButtonClicked();
-
-    public SubUI() {
-        System.setProperty("awt.useSystemAAFontSettings", "false"); // AntiAliasing false
-
-        osBean = ManagementFactory.getPlatformMXBean(OperatingSystemMXBean.class);
-        try {
-            Font font = Font.createFont(Font.TRUETYPE_FONT, new File("fonts/D2Coding.ttc"));
-            GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
-            ge.registerFont(font);
-        } catch (FontFormatException e) {
-        } catch (IOException e) {
-        }
-
-        //taLog.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 14));
-        Font d2font = new Font("D2Coding", Font.PLAIN, 14);
-        if (d2font != null) {
-            taLog.setFont(d2font);
-        }
-        taLog.setText(null);
-
-        chkLogPause.setFocusable(false);
-        btnLogPause.setFocusable(false);
-        btnLogDirOpen.setFocusable(false);
-        btnLogCopy.setFocusable(false);
-
-        btnLogPause.addActionListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent e) {
-                taLog.setText(null);
-            }
-        });
-        btnLogDirOpen.addActionListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent e) {
-                Runtime rt = Runtime.getRuntime();
-                try {
-                    rt.exec("explorer.exe logs");
-                } catch (IOException ex) {
-                    throw new RuntimeException(ex);
-                }
-            }
-        });
-        chkLogPause.addActionListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent e) {
-                JTextAreaOutputStream.isLoggingPause = chkLogPause.isSelected();
-            }
-        });
-        btnLogCopy.addActionListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent e) {
-                StringSelection stringSelection = new StringSelection(taLog.getText());
-                Clipboard clpBrd = Toolkit.getDefaultToolkit().getSystemClipboard();
-                clpBrd.setContents(stringSelection, null);
-            }
-        });
-
-        btnDisconnect.addActionListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent e) {
-                controlController(1);
-            }
-        });
-        btnReset.addActionListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent e) {
-                controlController(2);
-            }
-        });
-        btnInitialize.addActionListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent e) {
-                controlController(3);
-            }
-        });
-        btnImage.addActionListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent e) {
-                controlController(4);
-            }
-        });
-    }
-
-    public void updateInfo(TrafPrcsInfr selObj) {
-        this.selObj = selObj;
-        txtId.setText("");
-        txtName.setText("");
-        if (selObj != null) {
-            //txtId.setText(selObj.getRSE_ID());
-            txtName.setText(selObj.getRSE_NM());
-        }
-    }
-
-    /**
-     * 제어기 명령 처리
-     *
-     * @param type
-     */
-    public void controlController(int type) {
-        if (selObj == null) {
-            JOptionPane.showMessageDialog(getRootPanel(), "제어기가 선택되지 않았습니다. 목록을 더블클릭하여 제어기를 선택하세요.", "제어기 선택", JOptionPane.ERROR_MESSAGE);
-            return;
-        }
-//        if (selObj.getNetState() == NET.CLOSED) {
-//            JOptionPane.showMessageDialog(getRootPanel(), "제어기가 현재 연결이 되어 있지 않습니다.", "제어기 연결 상태", JOptionPane.ERROR_MESSAGE);
-//            return;
-//        }
-        String message, title;
-        switch (type) {
-            case 1:
-                message = "제어기와의 연결을 종료 하시겠습니까?";
-                title = "제어기 연결 종료";
-                break;
-            case 2:
-                message = "제어기를 리셋 하시겠습니까?";
-                title = "제어기 리셋";
-                break;
-            case 3:
-                message = "제어기를 초기화 하시겠습니까?";
-                title = "제어기 초기화";
-                break;
-            case 4:
-                message = "제어기의 정지영상 정보를 요청하시겠습니까?";
-                title = "제어기 정지영상 요청";
-                break;
-            default:
-                return;
-        }
-        if (JOptionPane.showConfirmDialog(getRootPanel(), message, title, JOptionPane.YES_NO_OPTION) != 0) {
-            return;
-        }
-
-        boolean result = false;
-        switch (type) {
-            case 1:
-                result = false;//selObj.channelClose();
-                break;
-            case 2:
-                result = true;//selObj.reset();
-                break;
-//            case 3:
-//                result = selObj.initialize();
-//                break;
-//            case 4:
-//                result = selObj.stopImage((byte) 0x01);
-//                break;
-            default:
-                return;
-        }
-        if (!result) {
-            JOptionPane.showMessageDialog(getRootPanel(), "명령 전송이 실패 하였습니다.", title, JOptionPane.ERROR_MESSAGE);
-        }
-    }
-
-    {
-// GUI initializer generated by IntelliJ IDEA GUI Designer
-// >>> IMPORTANT!! <<<
-// DO NOT EDIT OR ADD ANY CODE HERE!
-        $$$setupUI$$$();
-    }
-
-    /**
-     * Method generated by IntelliJ IDEA GUI Designer
-     * >>> IMPORTANT!! <<<
-     * DO NOT edit this method OR call it in your code!
-     *
-     * @noinspection ALL
-     */
-    private void $$$setupUI$$$() {
-        rootPanel = new JPanel();
-        rootPanel.setLayout(new GridLayoutManager(2, 1, new Insets(0, 0, 0, 0), -1, -1));
-        pnlCtlr = new JPanel();
-        pnlCtlr.setLayout(new GridLayoutManager(2, 2, new Insets(10, 4, 0, 4), -1, -1));
-        rootPanel.add(pnlCtlr, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
-        pnlCtlrTitlex = new JPanel();
-        pnlCtlrTitlex.setLayout(new GridLayoutManager(1, 2, new Insets(0, 0, 0, 2), -1, -1));
-        pnlCtlr.add(pnlCtlrTitlex, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_FIXED, 1, null, null, null, 0, false));
-        final JLabel label1 = new JLabel();
-        Font label1Font = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, label1.getFont());
-        if (label1Font != null) label1.setFont(label1Font);
-        label1.setHorizontalAlignment(2);
-        label1.setHorizontalTextPosition(11);
-        label1.setIcon(new ImageIcon(getClass().getResource("/static/image/controller.png")));
-        label1.setText("제어기 정보");
-        pnlCtlrTitlex.add(label1, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
-        final Spacer spacer1 = new Spacer();
-        pnlCtlrTitlex.add(spacer1, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, null, null, null, 0, false));
-        pnlControl = new JPanel();
-        pnlControl.setLayout(new GridLayoutManager(4, 2, new Insets(0, 0, 0, 2), 1, 1));
-        pnlCtlr.add(pnlControl, new GridConstraints(1, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false));
-        btnDisconnect = new JButton();
-        Font btnDisconnectFont = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, btnDisconnect.getFont());
-        if (btnDisconnectFont != null) btnDisconnect.setFont(btnDisconnectFont);
-        btnDisconnect.setText("연결끊기");
-        pnlControl.add(btnDisconnect, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
-        final JPanel panel1 = new JPanel();
-        panel1.setLayout(new GridLayoutManager(4, 2, new Insets(0, 0, 0, 0), -1, -1));
-        pnlControl.add(panel1, new GridConstraints(0, 0, 4, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false));
-        txtId = new JTextField();
-        txtId.setEditable(false);
-        Font txtIdFont = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, txtId.getFont());
-        if (txtIdFont != null) txtId.setFont(txtIdFont);
-        txtId.setHorizontalAlignment(0);
-        txtId.setText("ID");
-        panel1.add(txtId, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, new Dimension(100, -1), new Dimension(100, -1), new Dimension(100, -1), 0, false));
-        txtName = new JTextField();
-        txtName.setEditable(false);
-        Font txtNameFont = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, txtName.getFont());
-        if (txtNameFont != null) txtName.setFont(txtNameFont);
-        txtName.setHorizontalAlignment(2);
-        txtName.setText("제어기 명칭");
-        panel1.add(txtName, new GridConstraints(1, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(200, -1), null, 0, false));
-        final JLabel label2 = new JLabel();
-        label2.setText("ㅣ관리번호");
-        panel1.add(label2, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
-        textField1 = new JTextField();
-        panel1.add(textField1, new GridConstraints(2, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false));
-        textField2 = new JTextField();
-        panel1.add(textField2, new GridConstraints(3, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false));
-        btnReset = new JButton();
-        Font btnResetFont = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, btnReset.getFont());
-        if (btnResetFont != null) btnReset.setFont(btnResetFont);
-        btnReset.setText("리셋");
-        pnlControl.add(btnReset, new GridConstraints(1, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
-        btnInitialize = new JButton();
-        Font btnInitializeFont = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, btnInitialize.getFont());
-        if (btnInitializeFont != null) btnInitialize.setFont(btnInitializeFont);
-        btnInitialize.setText("초기화");
-        pnlControl.add(btnInitialize, new GridConstraints(3, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
-        btnImage = new JButton();
-        Font btnImageFont = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, btnImage.getFont());
-        if (btnImageFont != null) btnImage.setFont(btnImageFont);
-        btnImage.setText("정지영상");
-        pnlControl.add(btnImage, new GridConstraints(2, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
-        final JPanel panel2 = new JPanel();
-        panel2.setLayout(new GridLayoutManager(1, 1, new Insets(0, 0, 0, 0), -1, -1));
-        pnlCtlr.add(panel2, new GridConstraints(1, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false));
-        pnlLog = new JPanel();
-        pnlLog.setLayout(new GridLayoutManager(2, 1, new Insets(0, 4, 0, 4), -1, -1));
-        rootPanel.add(pnlLog, new GridConstraints(1, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false));
-        pnlLogTitle = new JPanel();
-        pnlLogTitle.setLayout(new GridLayoutManager(1, 6, new Insets(0, 0, 0, 2), 1, 1));
-        pnlLog.add(pnlLogTitle, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false));
-        final JLabel label3 = new JLabel();
-        Font label3Font = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, label3.getFont());
-        if (label3Font != null) label3.setFont(label3Font);
-        label3.setHorizontalAlignment(2);
-        label3.setIcon(new ImageIcon(getClass().getResource("/static/image/logging.png")));
-        label3.setText("제어기 로그");
-        pnlLogTitle.add(label3, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
-        final Spacer spacer2 = new Spacer();
-        pnlLogTitle.add(spacer2, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, null, null, null, 0, false));
-        btnLogDirOpen = new JButton();
-        Font btnLogDirOpenFont = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, btnLogDirOpen.getFont());
-        if (btnLogDirOpenFont != null) btnLogDirOpen.setFont(btnLogDirOpenFont);
-        btnLogDirOpen.setHorizontalTextPosition(0);
-        btnLogDirOpen.setText("로그 폴더");
-        pnlLogTitle.add(btnLogDirOpen, new GridConstraints(0, 5, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
-        btnLogPause = new JButton();
-        Font btnLogPauseFont = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, btnLogPause.getFont());
-        if (btnLogPauseFont != null) btnLogPause.setFont(btnLogPauseFont);
-        btnLogPause.setHorizontalTextPosition(0);
-        btnLogPause.setText("지우기");
-        pnlLogTitle.add(btnLogPause, new GridConstraints(0, 3, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
-        chkLogPause = new JCheckBox();
-        Font chkLogPauseFont = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, chkLogPause.getFont());
-        if (chkLogPauseFont != null) chkLogPause.setFont(chkLogPauseFont);
-        chkLogPause.setHorizontalAlignment(0);
-        chkLogPause.setHorizontalTextPosition(11);
-        chkLogPause.setText("멈춤");
-        pnlLogTitle.add(chkLogPause, new GridConstraints(0, 2, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
-        btnLogCopy = new JButton();
-        Font btnLogCopyFont = this.$$$getFont$$$("Malgun Gothic", Font.PLAIN, 12, btnLogCopy.getFont());
-        if (btnLogCopyFont != null) btnLogCopy.setFont(btnLogCopyFont);
-        btnLogCopy.setText("복사");
-        pnlLogTitle.add(btnLogCopy, new GridConstraints(0, 4, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
-        final JScrollPane scrollPane1 = new JScrollPane();
-        Font scrollPane1Font = this.$$$getFont$$$("D2Coding", Font.PLAIN, 12, scrollPane1.getFont());
-        if (scrollPane1Font != null) scrollPane1.setFont(scrollPane1Font);
-        pnlLog.add(scrollPane1, new GridConstraints(1, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, null, null, null, 0, false));
-        taLog = new JTextArea();
-        taLog.setBackground(new Color(-16777216));
-        taLog.setCaretColor(new Color(-1));
-        taLog.setEditable(false);
-        Font taLogFont = this.$$$getFont$$$("D2Coding", Font.PLAIN, 14, taLog.getFont());
-        if (taLogFont != null) taLog.setFont(taLogFont);
-        taLog.setForeground(new Color(-1));
-        taLog.setMargin(new Insets(4, 4, 4, 4));
-        taLog.setText("[10:50:08.561] [ INFO] ************************************************************************************\n[10:50:08.561] [ INFO] **                   Center Communication Server Information                      **\n[10:50:08.561] [ INFO] **     bindAddress: 0.0.0.0\n[10:50:08.561] [ INFO] **      listenPort: 9901\n[10:50:08.561] [ INFO] **         backlog: 1024\n[10:50:08.561] [ INFO] **   acceptThreads: 16\n[10:50:08.561] [ INFO] **   workerThreads: 16\n[10:50:08.561] [ INFO] ************************************************************************************\n");
-        scrollPane1.setViewportView(taLog);
-    }
-
-    /**
-     * @noinspection ALL
-     */
-    private Font $$$getFont$$$(String fontName, int style, int size, Font currentFont) {
-        if (currentFont == null) return null;
-        String resultName;
-        if (fontName == null) {
-            resultName = currentFont.getName();
-        } else {
-            Font testFont = new Font(fontName, Font.PLAIN, 10);
-            if (testFont.canDisplay('a') && testFont.canDisplay('1')) {
-                resultName = fontName;
-            } else {
-                resultName = currentFont.getName();
-            }
-        }
-        Font font = new Font(resultName, style >= 0 ? style : currentFont.getStyle(), size >= 0 ? size : currentFont.getSize());
-        boolean isMac = System.getProperty("os.name", "").toLowerCase(Locale.ENGLISH).startsWith("mac");
-        Font fontWithFallback = isMac ? new Font(font.getFamily(), font.getStyle(), font.getSize()) : new StyleContext().getFont(font.getFamily(), font.getStyle(), font.getSize());
-        return fontWithFallback instanceof FontUIResource ? fontWithFallback : new FontUIResource(fontWithFallback);
-    }
-
-    /**
-     * @noinspection ALL
-     */
-    public JComponent $$$getRootComponent$$$() {
-        return rootPanel;
-    }
-}

+ 0 - 37
src/main/java/com/its/traf/ui/SubUIController.java

@@ -1,37 +0,0 @@
-package com.its.traf.ui;
-
-import com.its.traf.entity.TrafPrcsInfr;
-
-import javax.swing.*;
-import java.awt.*;
-
-public class SubUIController extends JFrame {
-    private SubUI view;
-    private JFrame caller;
-
-    public SubUIController(JFrame jFrame) {
-        super("제어기 정보");
-        String pathOfImage = "C:\\DEV\\ITS\\01.WINDOWS\\22.01.YONGIN\\JAVA\\vds-comm-server\\src\\main\\resources\\static\\image\\application.png";
-        setIconImage(Toolkit.getDefaultToolkit().getImage(pathOfImage));
-        this.caller = jFrame;
-        this.view = new SubUI() {
-            @Override
-            protected void actionButtonClicked() {
-                doAction();
-            }
-        };
-        this.setContentPane(view.$$$getRootComponent$$$());
-        this.setDefaultCloseOperation(HIDE_ON_CLOSE);
-        this.pack();
-    }
-
-    private void doAction() {
-        this.view.updateInfo(null);
-        this.setVisible(false);
-        caller.validate();
-    }
-
-    public void updateInfo(TrafPrcsInfr selObj) {
-        this.view.updateInfo(selObj);
-    }
-}

+ 31 - 0
src/main/java/com/its/traf/ui/TrafPrcsTableCellRenderer.java

@@ -0,0 +1,31 @@
+package com.its.traf.ui;
+
+import javax.swing.*;
+import javax.swing.table.DefaultTableCellRenderer;
+import java.awt.*;
+
+public class TrafPrcsTableCellRenderer extends DefaultTableCellRenderer {
+
+    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
+
+        Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
+        cell.setBackground(new Color(255, 255, 255, 255));
+        switch(column) {
+            case 0: case 3: case 4:
+                setHorizontalAlignment(SwingConstants.CENTER);
+                break;
+            case 5: case 6: case 7:
+                setHorizontalAlignment(SwingConstants.RIGHT);
+                break;
+            default:
+                setHorizontalAlignment(SwingConstants.LEFT);
+                break;
+        }
+
+        if (column == 0) {
+            cell.setBackground(Color.LIGHT_GRAY);
+        }
+
+        return cell;
+    }
+}

+ 147 - 0
src/main/java/com/its/traf/ui/TrafPrcsTableModel.java

@@ -0,0 +1,147 @@
+package com.its.traf.ui;
+
+import com.its.traf.vo.TrafPrcsVo;
+import lombok.extern.slf4j.Slf4j;
+
+import javax.swing.table.AbstractTableModel;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+
+@Slf4j
+public class TrafPrcsTableModel extends AbstractTableModel {
+    private static final long serialVersionUID = 1331132425472559704L;
+
+    private List<TrafPrcsVo> ctlrList = Collections.synchronizedList(new ArrayList<TrafPrcsVo>());
+    private final String[] columnNames = {
+            "#",
+            "작업명",
+            "TARGET",
+            "시작시각",
+            "종료시각",
+            "건수(EA)",
+            "작업시간(ms)",
+            "평균작업시간"
+    };
+    public static final String[] netStateStr = {
+            "Close", "Login", "Connect",
+    };
+
+    public TrafPrcsTableModel(List<TrafPrcsVo> ctlrList) {
+        this.ctlrList = ctlrList;
+
+        int indexCount = 1;
+        for (TrafPrcsVo obj : ctlrList) {
+            obj.setIndex(indexCount++);
+        }
+    }
+
+    @Override
+    public int getColumnCount() {
+        return columnNames.length;
+    }
+
+    @Override
+    public int getRowCount() {
+        int size = 0;
+        synchronized (this.ctlrList) {
+            size = this.ctlrList.size();
+        }
+        return size;
+    }
+
+    @Override
+    public String getColumnName(int columnIndex) {
+        if (columnIndex < columnNames.length) {
+            return columnNames[columnIndex];
+        }
+        return super.getColumnName(columnIndex);
+    }
+
+    @Override
+    public Class<?> getColumnClass(int columnIndex) {
+        if (ctlrList.isEmpty()) {
+            return Object.class;
+        }
+        return getValueAt(0, columnIndex).getClass();
+    }
+
+    public TrafPrcsVo getControllerInfo(int row) {
+        TrafPrcsVo info = this.ctlrList.get(row);
+        return info;
+    }
+
+    @Override
+    public Object getValueAt(int rowIndex, int columnIndex) {
+        Object returnValue = null;
+        synchronized (this.ctlrList) {
+            TrafPrcsVo info = this.ctlrList.get(rowIndex);
+            if (info == null) {
+                return "";
+            }
+
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
+            switch (columnIndex) {
+                case 0:
+                    returnValue = info.getIndex();
+                    break;
+                case 1:
+                    returnValue = info.getJob();
+                    break;
+                case 2:
+                    returnValue = info.getTarget();
+                    break;
+                case 3:
+                    returnValue = sdf.format(new Date(info.getStartTm()));
+                    break;
+                case 4:
+                    returnValue = sdf.format(new Date(info.getEndTm()));
+                    break;
+                case 5:
+                    returnValue = info.getJobCount();
+                    break;
+                case 6:
+                    returnValue = info.getJobTm();
+                    break;
+                case 7:
+                    returnValue = info.getAvgJobTm();
+                    break;
+                default:
+                    break;
+            }
+        }
+        return returnValue;
+    }
+
+    @Override
+    public void setValueAt(Object value, int rowIndex, int columnIndex) {
+        synchronized (this.ctlrList) {
+            TrafPrcsVo obj = ctlrList.get(rowIndex);
+            if (columnIndex == 0) {
+                obj.setIndex((int) value);
+            }
+        }
+    }
+    public void setValueAt(TrafPrcsVo obj, int rowIdx, int colIdx) {
+        synchronized (this.ctlrList) {
+        }
+        fireTableCellUpdated(rowIdx, colIdx);
+        fireTableDataChanged();
+    }
+
+    public void Add(TrafPrcsVo info) {
+        int index = 0;
+        synchronized (this.ctlrList) {
+            index = this.ctlrList.size();
+            this.ctlrList.add(info);
+        }
+        fireTableRowsInserted(index, index);
+    }
+
+    public void setValue(TrafPrcsVo obj, int viewRow, int modelRow) {
+        fireTableDataChanged();
+    }
+
+}

+ 31 - 0
src/main/java/com/its/traf/ui/TrafStatTableCellRenderer.java

@@ -0,0 +1,31 @@
+package com.its.traf.ui;
+
+import javax.swing.*;
+import javax.swing.table.DefaultTableCellRenderer;
+import java.awt.*;
+
+public class TrafStatTableCellRenderer extends DefaultTableCellRenderer {
+
+    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
+
+        Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
+        cell.setBackground(new Color(255, 255, 255, 255));
+        switch(column) {
+            case 0: case 3: case 4:
+                setHorizontalAlignment(SwingConstants.CENTER);
+                break;
+            case 5: case 6: case 7:
+                setHorizontalAlignment(SwingConstants.RIGHT);
+                break;
+            default:
+                setHorizontalAlignment(SwingConstants.LEFT);
+                break;
+        }
+
+        if (column == 0) {
+            cell.setBackground(Color.LIGHT_GRAY);
+        }
+
+        return cell;
+    }
+}

+ 147 - 0
src/main/java/com/its/traf/ui/TrafStatTableModel.java

@@ -0,0 +1,147 @@
+package com.its.traf.ui;
+
+import com.its.traf.vo.TrafStatVo;
+import lombok.extern.slf4j.Slf4j;
+
+import javax.swing.table.AbstractTableModel;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+
+@Slf4j
+public class TrafStatTableModel extends AbstractTableModel {
+    private static final long serialVersionUID = 1331132425472559704L;
+
+    private List<TrafStatVo> ctlrList = Collections.synchronizedList(new ArrayList<TrafStatVo>());
+    private final String[] columnNames = {
+            "#",
+            "작업명",
+            "TARGET",
+            "시작시각",
+            "종료시각",
+            "건수(EA)",
+            "작업시간(ms)",
+            "평균작업시간"
+    };
+    public static final String[] netStateStr = {
+            "Close", "Login", "Connect",
+    };
+
+    public TrafStatTableModel(List<TrafStatVo> ctlrList) {
+        this.ctlrList = ctlrList;
+
+        int indexCount = 1;
+        for (TrafStatVo obj : ctlrList) {
+            obj.setIndex(indexCount++);
+        }
+    }
+
+    @Override
+    public int getColumnCount() {
+        return columnNames.length;
+    }
+
+    @Override
+    public int getRowCount() {
+        int size = 0;
+        synchronized (this.ctlrList) {
+            size = this.ctlrList.size();
+        }
+        return size;
+    }
+
+    @Override
+    public String getColumnName(int columnIndex) {
+        if (columnIndex < columnNames.length) {
+            return columnNames[columnIndex];
+        }
+        return super.getColumnName(columnIndex);
+    }
+
+    @Override
+    public Class<?> getColumnClass(int columnIndex) {
+        if (ctlrList.isEmpty()) {
+            return Object.class;
+        }
+        return getValueAt(0, columnIndex).getClass();
+    }
+
+    public TrafStatVo getControllerInfo(int row) {
+        TrafStatVo info = this.ctlrList.get(row);
+        return info;
+    }
+
+    @Override
+    public Object getValueAt(int rowIndex, int columnIndex) {
+        Object returnValue = null;
+        synchronized (this.ctlrList) {
+            TrafStatVo info = this.ctlrList.get(rowIndex);
+            if (info == null) {
+                return "";
+            }
+
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
+            switch (columnIndex) {
+                case 0:
+                    returnValue = info.getIndex();
+                    break;
+                case 1:
+                    returnValue = info.getJob();
+                    break;
+                case 2:
+                    returnValue = info.getTarget();
+                    break;
+                case 3:
+                    returnValue = sdf.format(new Date(info.getStartTm()));
+                    break;
+                case 4:
+                    returnValue = sdf.format(new Date(info.getEndTm()));
+                    break;
+                case 5:
+                    returnValue = info.getJobCount();
+                    break;
+                case 6:
+                    returnValue = info.getJobTm();
+                    break;
+                case 7:
+                    returnValue = info.getAvgJobTm();
+                    break;
+                default:
+                    break;
+            }
+        }
+        return returnValue;
+    }
+
+    @Override
+    public void setValueAt(Object value, int rowIndex, int columnIndex) {
+        synchronized (this.ctlrList) {
+            TrafStatVo obj = ctlrList.get(rowIndex);
+            if (columnIndex == 0) {
+                obj.setIndex((int) value);
+            }
+        }
+    }
+    public void setValueAt(TrafStatVo obj, int rowIdx, int colIdx) {
+        synchronized (this.ctlrList) {
+        }
+        fireTableCellUpdated(rowIdx, colIdx);
+        fireTableDataChanged();
+    }
+
+    public void Add(TrafStatVo info) {
+        int index = 0;
+        synchronized (this.ctlrList) {
+            index = this.ctlrList.size();
+            this.ctlrList.add(info);
+        }
+        fireTableRowsInserted(index, index);
+    }
+
+    public void setValue(TrafStatVo obj, int viewRow, int modelRow) {
+        fireTableDataChanged();
+    }
+
+}

+ 8 - 0
src/main/java/com/its/traf/vo/TrafJobType.java

@@ -0,0 +1,8 @@
+package com.its.traf.vo;
+
+public enum TrafJobType {
+
+    LOAD_PARAMETER,
+    LOAD_BASEDATA,
+    LOAD_PATTERN,
+}

+ 43 - 0
src/main/java/com/its/traf/vo/TrafPrcsVo.java

@@ -0,0 +1,43 @@
+package com.its.traf.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+@Getter
+@Setter
+@ToString
+public class TrafPrcsVo {
+    private int    index;
+    private int    jobSeq;
+    private String job;
+    private String target;
+
+    private long startTm;
+    private long endTm;
+    private int  jobCount;
+    private int  jobTm;
+    private int  avgJobTm;
+
+    public TrafPrcsVo(int jobSeq, String job, String target) {
+        this.jobSeq = jobSeq;
+        this.job = job;
+        this.target = target;
+        this.jobTm = 0;
+        this.avgJobTm = 0;
+    }
+
+    public void startTime() {
+        this.startTm = System.currentTimeMillis();
+    }
+    public void endTime(int jobCount) {
+        this.jobCount = jobCount;
+        this.endTm = System.currentTimeMillis();
+        this.jobTm = (int)(this.endTm - this.startTm);
+        if (this.avgJobTm > 0) {
+            this.avgJobTm = this.jobTm;
+        } else {
+            this.avgJobTm = (this.jobTm + this.avgJobTm) / 2;
+        }
+    }
+}

+ 43 - 0
src/main/java/com/its/traf/vo/TrafStatVo.java

@@ -0,0 +1,43 @@
+package com.its.traf.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+@Getter
+@Setter
+@ToString
+public class TrafStatVo {
+    private int    index;
+    private int    jobSeq;
+    private String job;
+    private String target;
+
+    private long startTm;
+    private long endTm;
+    private int  jobCount;
+    private int  jobTm;
+    private int  avgJobTm;
+
+    public TrafStatVo(int jobSeq, String job, String target) {
+        this.jobSeq = jobSeq;
+        this.job = job;
+        this.target = target;
+        this.jobTm = 0;
+        this.avgJobTm = 0;
+    }
+
+    public void startTime() {
+        this.startTm = System.currentTimeMillis();
+    }
+    public void endTime(int jobCount) {
+        this.jobCount = jobCount;
+        this.endTm = System.currentTimeMillis();
+        this.jobTm = (int)(this.endTm - this.startTm);
+        if (this.avgJobTm > 0) {
+            this.avgJobTm = this.jobTm;
+        } else {
+            this.avgJobTm = (this.jobTm + this.avgJobTm) / 2;
+        }
+    }
+}

+ 2 - 1
src/main/resources/application-dev.yml

@@ -7,7 +7,7 @@ spring:
   datasource:
     hikari:
       driver-class-name: oracle.jdbc.OracleDriver
-      jdbc-url: jdbc:oracle:thin:@115.91.94.42:1521:HANTE
+      jdbc-url: jdbc:oracle:thin:@115.91.94.42:1522:HANTE19C
       username: ptatms
       password: ptatms
       connection-test-query: SELECT 1 FROM DUAL
@@ -24,6 +24,7 @@ spring:
       ddl-auto: none
     properties:
       hibernate:
+        dialect: org.hibernate.dialect.Oracle10gDialect
         default_batch_fetch_size: 1000
         format_sql: true
         use_sql_columns: true

+ 1 - 1
src/main/resources/application.yml

@@ -27,7 +27,7 @@ application:
     org-code: 44146000
 
 server:
-  port: 8998
+  port: 7998
   shutdown: graceful
   error:
     whitelabel:

+ 36 - 36
src/main/resources/logback-spring.xmlx → src/main/resources/logback-spring.xml

@@ -105,42 +105,42 @@
         <appender-ref ref="FILE_ERROR"/>
     </logger>
 
-    <appender name="CENTER_COMM" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>${LOG_PATH}${LOG_FILE_NAME_CENTER_COMM}</file>
-        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
-            <charset>${LOG_CHARSET}</charset>
-            <pattern>${LOG_PATTERN_CENTER_COMM}</pattern>
-        </encoder>
-        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
-            <fileNamePattern>${LOG_BACKUP_PATH}CenterComm/${LOG_FILE_NAME_CENTER_COMM}.${LOG_FILE_NAME_PATTERN}</fileNamePattern>
-            <maxFileSize>${MAX_FILESIZE}</maxFileSize>
-            <maxHistory>${MAX_HISTORY}</maxHistory>
-        </rollingPolicy>
-    </appender>
-
-    <logger name="${APP_CLASS_PATH}.xnetudp" level="DEBUG" additivity="false">
-        <appender-ref ref="CONSOLE"/>
-        <appender-ref ref="CENTER_COMM"/>
-        <appender-ref ref="FILE_ERROR"/>
-    </logger>
-
-    <appender name="FILE_SESSION" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>${LOG_PATH}${LOG_FILE_NAME_SESSION}</file>
-        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
-            <charset>${LOG_CHARSET}</charset>
-            <pattern>${LOG_PATTERN_FILE}</pattern>
-        </encoder>
-        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
-            <fileNamePattern>${LOG_BACKUP_PATH}${LOG_FILE_NAME_SESSION}.${LOG_FILE_NAME_PATTERN}</fileNamePattern>
-            <maxFileSize>${MAX_FILESIZE}</maxFileSize>
-            <maxHistory>${MAX_HISTORY}</maxHistory>
-        </rollingPolicy>
-    </appender>
-
-    <logger name="${APP_CLASS_PATH}.xnettcp" level="DEBUG" additivity="true">
-        <appender-ref ref="FILE_SESSION"/>
-        <appender-ref ref="FILE_ERROR"/>
-    </logger>
+<!--    <appender name="CENTER_COMM" class="ch.qos.logback.core.rolling.RollingFileAppender">-->
+<!--        <file>${LOG_PATH}${LOG_FILE_NAME_CENTER_COMM}</file>-->
+<!--        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">-->
+<!--            <charset>${LOG_CHARSET}</charset>-->
+<!--            <pattern>${LOG_PATTERN_CENTER_COMM}</pattern>-->
+<!--        </encoder>-->
+<!--        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">-->
+<!--            <fileNamePattern>${LOG_BACKUP_PATH}CenterComm/${LOG_FILE_NAME_CENTER_COMM}.${LOG_FILE_NAME_PATTERN}</fileNamePattern>-->
+<!--            <maxFileSize>${MAX_FILESIZE}</maxFileSize>-->
+<!--            <maxHistory>${MAX_HISTORY}</maxHistory>-->
+<!--        </rollingPolicy>-->
+<!--    </appender>-->
+
+<!--    <logger name="${APP_CLASS_PATH}.xnetudp" level="DEBUG" additivity="false">-->
+<!--        <appender-ref ref="CONSOLE"/>-->
+<!--        <appender-ref ref="CENTER_COMM"/>-->
+<!--        <appender-ref ref="FILE_ERROR"/>-->
+<!--    </logger>-->
+
+<!--    <appender name="FILE_SESSION" class="ch.qos.logback.core.rolling.RollingFileAppender">-->
+<!--        <file>${LOG_PATH}${LOG_FILE_NAME_SESSION}</file>-->
+<!--        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">-->
+<!--            <charset>${LOG_CHARSET}</charset>-->
+<!--            <pattern>${LOG_PATTERN_FILE}</pattern>-->
+<!--        </encoder>-->
+<!--        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">-->
+<!--            <fileNamePattern>${LOG_BACKUP_PATH}${LOG_FILE_NAME_SESSION}.${LOG_FILE_NAME_PATTERN}</fileNamePattern>-->
+<!--            <maxFileSize>${MAX_FILESIZE}</maxFileSize>-->
+<!--            <maxHistory>${MAX_HISTORY}</maxHistory>-->
+<!--        </rollingPolicy>-->
+<!--    </appender>-->
+
+<!--    <logger name="${APP_CLASS_PATH}.xnettcp" level="DEBUG" additivity="true">-->
+<!--        <appender-ref ref="FILE_SESSION"/>-->
+<!--        <appender-ref ref="FILE_ERROR"/>-->
+<!--    </logger>-->
 
     <appender name="FILE_STATISTICS" class="ch.qos.logback.core.rolling.RollingFileAppender">
         <file>${LOG_PATH}${LOG_FILE_NAME_STATISTICS}</file>

+ 2 - 2
src/main/resources/mybatis/mapper/its/RoadMapper.xml

@@ -82,7 +82,7 @@
 
     <insert id="insertRoadTrafStat15M" parameterType="java.util.Map">
     <![CDATA[
-        INSERT INTO TB_ROAD_15M_STAT (
+        INSERT INTO TB_ROAD_STAT_15M (
               STAT_DT,
               ROAD_ID,
               DAY_TYPE_CD,
@@ -97,7 +97,7 @@
             #{DAY_TYPE_CD},
             #{TFVL},
             #{SPED},
-            #{OCPY_RATE}},
+            #{OCPY_RATE},
             #{TRVL_HH},
             #{DATA_NUM} )
     ]]>

二进制
src/main/resources/static/image/application.png


二进制
src/main/resources/static/image/application2.png