Package com.ordobill.webapp.action

Source Code of com.ordobill.webapp.action.ProjectAction

package com.ordobill.webapp.action;

import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.StringTokenizer;
import java.util.Vector;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;


import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import org.apache.struts.actions.DispatchAction;

import com.ibatis.sqlmap.client.SqlMapClient;
import com.ordobill.webapp.beans.FigInform;
import com.ordobill.webapp.beans.Figures;
import com.ordobill.webapp.beans.ImportBean;
import com.ordobill.webapp.beans.Modeling;
import com.ordobill.webapp.beans.Project;
import com.ordobill.webapp.beans.ProjectLOG;
import com.ordobill.webapp.beans.Report;
import com.ordobill.webapp.beans.SampleBean;
import com.ordobill.webapp.beans.Sampleform;
import com.ordobill.webapp.beans.SimulationFields;
import com.ordobill.webapp.common.Constants;
import com.ordobill.webapp.common.PoiManager;
import com.ordobill.webapp.common.SqlMapClientManager;
import com.ordobill.webapp.common.Util;
import com.ordobill.webapp.economic.*;
import com.ordobill.webapp.engine.SampleEngineImpl;



public class ProjectAction extends DispatchAction{
   
    private Log log = LogFactory.getFactory().getInstance(this.getClass().getName());
    private SqlMapClient sqlMap = SqlMapClientManager.getSqlMapClient();
    private Util util = new Util ();
   
    //Flex에서 언제나 호출 할 수 있게 static으로 SimulationFields를만들었습니다.
    //RemoteJava의 58라인을 확인하세요
    public static HashMap<String, SimulationFields[]> simulationArr = new HashMap<String, SimulationFields[]>();

    /**
     * 프로젝트의 리스트를 보여줍니다.
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    @SuppressWarnings("unchecked")
    public ActionForward list(ActionMapping mapping,
                               ActionForm form,
                               HttpServletRequest request,
                               HttpServletResponse response) throws Exception {
       
        Project projectForm = (Project)form;
        HttpSession session = request.getSession();
       
        //2013.01.29 list 페이지 checkbox 삭제 추가
        if (!projectForm.getKeyArr().equals(null)) {
          ActionMessages msg = new ActionMessages();
            int message = -1;
            String val = projectForm.getKeyArr();
          StringTokenizer strT = new StringTokenizer(val , "||");
            while(strT.hasMoreTokens()){
               String tempStr = strT.nextToken();
               if(!tempStr.equals("") && !tempStr.equals(null)){
                 Project _Project = new Project();
                 _Project.setProUid(Integer.parseInt(tempStr.trim()));
                 message = (Integer) sqlMap.delete("Project.projectDelete", _Project)// PROJECT
                    sqlMap.delete("Project.modelingDelete", _Project); // MODELING
                    sqlMap.delete("Project.figuresDelete", _Project)// FIGURES
                    if(message == 0){
                       msg.add("message", new ActionMessage("삭제에 실패했습니다."));
                    }
               }
            }
            if(message > 0){
                 msg.add("message", new ActionMessage("삭제에 성공했습니다."));
                 session.removeAttribute("proUid");
            }
            saveMessages(request, msg);
        }
       
        // 2012-02-07 정재우 실장님의 요청으로 등급별 리스트 조회 조건 추가함 ( UserLevel 1:관리자(전체)/ 0:일반(본인) 리스트 구분)
        if("0".equals((String)session.getAttribute("loginUserLevel"))) {
            projectForm.setProId((String)session.getAttribute("unitIDInSession"));
        }else{
            projectForm.setProId("");
        }
       EconomicAnalysis _EconomicAnalysis = new EconomicAnalysis();
       System.out.println("--------------------------------------------------");
       System.out.println("경제성 분석!!!"+_EconomicAnalysis.compute(30000,3000,12,24));
       System.out.println("--------------------------------------------------");
       
        int totalCount = (Integer) sqlMap.queryForObject("Project.listCount", projectForm);
       
        String pagingHtml = util.getPagingHtml(request,totalCount, 10,projectForm.getPageNo(), 10);
        projectForm.setStrnum(util.sStartRow);
        projectForm.setEndnum(util.sEndRow);
        projectForm.setPageNo(util.sCurrentPage);
       
        ArrayList<Project> projectList = (ArrayList<Project>) sqlMap.queryForList("Project.list", projectForm);
        request.setAttribute("pagingHtml", pagingHtml);
        request.setAttribute("projectList", projectList);
        request.setAttribute("projectForm", projectForm);
        request.setAttribute("totalCount", totalCount);
        return mapping.findForward("list");
    }
   
    /**
     * 프로젝트의 정보를 보여줍니다.
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    @SuppressWarnings("unchecked")
  public ActionForward info(ActionMapping mapping, ActionForm form,
      HttpServletRequest request, HttpServletResponse response)
      throws Exception {
      Project projectForm = (Project)form;
        HttpSession session = request.getSession();
        session.setAttribute("proUid", projectForm.getProUid());
       
        Project projectData = new Project();
        ArrayList<ProjectLOG> logList = new ArrayList<ProjectLOG>();
        String result="";
       
        if(projectForm.getProUid() > 0){
          projectData = (Project)sqlMap.queryForObject("Project.list", projectForm);
        logList = (ArrayList<ProjectLOG>)sqlMap.queryForList("Project.loglist", projectForm);
        result="info";
        } else {
          result="input";
        }
       
        request.setAttribute("projectData", projectData);
        request.setAttribute("logList", logList);
        return mapping.findForward(result);
  }
    /*
     *  public ActionForward info(ActionMapping mapping,
                              ActionForm form,
                              HttpServletRequest request,
                              HttpServletResponse response) throws Exception {
        Project projectForm = (Project)form;
        HttpSession session = request.getSession();
        session.setAttribute("proUid", projectForm.getProUid());
        ProjectLOG _ProjectLOG = new ProjectLOG();
        Project projectData = new Project();
        ArrayList<ProjectLOG> logList = new ArrayList<ProjectLOG>();
        String result = "";
        if (projectForm.getProUid()>0 ) {
            projectData = (Project)sqlMap.queryForObject("Project.list", projectForm);
        logList = (ArrayList<ProjectLOG>)sqlMap.queryForList("Project.loglist", projectForm);
        result = "info";
        } else {
          result = "input";
        }
        request.setAttribute("projectData", projectData);
        request.setAttribute("logList", logList);
        return mapping.findForward(result);
    }
     *
     */
    /**
     * 모델링 페이지로가는 ActionForward입니다.
     *
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return ActionMapping
     * @throws Exception
     */
    @SuppressWarnings("unused")
    public ActionForward model(ActionMapping mapping,
                                ActionForm form,
                                HttpServletRequest request,
                                HttpServletResponse response) throws Exception {
        Project projectForm = (Project)form;
        HttpSession session = request.getSession();
        session.setAttribute("proUid", projectForm.getProUid());
        System.out.println("model");
        return mapping.findForward("model");
    }
   
    /**
     * 프로젝트를 저장합니다.
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public ActionForward insert(ActionMapping mapping,
                                ActionForm form,
                                HttpServletRequest request,
                                HttpServletResponse response) throws Exception {
        Project projectForm = (Project)form;
        HttpSession session = request.getSession();
        session.setAttribute("proUid", projectForm.getProUid());
        ActionMessages msg = new ActionMessages();
        int message = -1;
        message = (Integer) sqlMap.insert("Project.projectInsert", projectForm);
       
        if(message == 0){
            msg.add("message", new ActionMessage("저장에 실패했습니다."));
        }else if(message > 0){
            msg.add("message", new ActionMessage("저장에 성공했습니다."));
            int proUid = message;
            sqlMap.insert("Project.projectLogInsert", proUid);
        }
       
        saveMessages(request, msg);
        projectForm.setProUid(message);
        request.setAttribute("projectData", projectForm);
        return mapping.findForward("success");
    }
   
    /**
     * 시뮬레이션을 위한 기초값을 넣는 Method입니다.
     * Method for Input base on variable of simulation
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public ActionForward simulatorBase(ActionMapping mapping,
                                   ActionForm form,
                                   HttpServletRequest request,
                                   HttpServletResponse response) throws Exception {
            Project projectForm = (Project)form;
            HttpSession session = request.getSession();
            session.setAttribute("proUid", projectForm.getProUid());
            projectForm = (Project) sqlMap.queryForObject("Project.list", projectForm);
            request.setAttribute("projectForm", projectForm);
            return mapping.findForward("simulatorBase");
    }
   
    /**
     * 시뮬레이션의 기본 화면을 위한 Method입니다.
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    @SuppressWarnings("unchecked")
    public ActionForward simulator(ActionMapping mapping,
                                   ActionForm form,
                                   HttpServletRequest request,
                                   HttpServletResponse response) throws Exception {
        Project projectForm = (Project)form;
        HttpSession session = request.getSession(false)
        session.setAttribute("proUid", projectForm.getProUid());
        if(simulationArr !=null && !simulationArr.isEmpty()){
            simulationArr.remove((String)session.getAttribute(Constants.SESSION_GETID));
        }
        log.debug("Iteration Number   ========="+projectForm.getProIterNum());
        log.debug("Startting Time     ========="+projectForm.getProStartTime());
        log.debug("Life      Time     ========="+projectForm.getProLifeTime());
        log.debug("Time      Division ========="+projectForm.getProTd());
       
        Project simBaseForm = (Project) sqlMap.queryForObject("Project.list", projectForm);
        ArrayList<Figures> figList = (ArrayList<Figures>) sqlMap.queryForList("Figures.list", new Figures(projectForm));
       
        request.setAttribute("simBaseForm", simBaseForm);
        request.setAttribute("figList", figList);
        return mapping.findForward("simulator");
    }
   
    /**
     * 시뮬레이션을 실행합니다.
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    @SuppressWarnings("unchecked")
    public ActionForward runSimulator(ActionMapping mapping,
                                       ActionForm form,
                                       HttpServletRequest request,
                                       HttpServletResponse response)throws Exception{
        Project projectForm = (Project)form; // Project Practice Setting value
        HttpSession session = request.getSession(false); //HttpSession이 존재하면 현재 HttpSession을 반환하고 존재하지 않으면 새로이 생성하지 않고 그냥 null을 반환
        if(simulationArr !=null && !simulationArr.isEmpty()){ // 기존 simualtionArr 을 삭제
            simulationArr.remove(session.getAttribute(Constants.SESSION_GETID));
        }
        System.out.println("runSimulator");
       
        log.debug("Iteration Number   ========="+projectForm.getProIterNum());
        log.debug("Startting Time     ========="+projectForm.getProStartTime());
        log.debug("Life      Time     ========="+projectForm.getProLifeTime());
        log.debug("Time      Division ========="+projectForm.getProTd());
       
        SampleEngineImpl sampleEngine = new SampleEngineImpl();
        SampleBean samplebean = new SampleBean();
       
        //2012-01-13 정재우 실장님의 요청으로 추가함
        ActionMessages msg = new ActionMessages();
        int message = -1;
        message = (Integer) sqlMap.update("Project.simulatorUpdate", projectForm);
        /**
         * Project.simulatorUpdate query
         *   UPDATE PROJECT
           SET  PRO_ITERNUM        = #proIterNum#     
               ,PRO_STARTTIME        = #proStartTime#
               ,PRO_LIFETIME         = #proLifeTime#
               ,PRO_TD      = #proTd#
               ,PRO_OUTPUT  = #proOutput#
         ,PRO_ANNUALRATE  = #proAnnualRate#
         WHERE PRO_UID = #proUid#
         */
    if(message == 0){
      msg.add("message", new ActionMessage("저장에 실패했습니다."));
    }else if(message > 0){
      msg.add("message", new ActionMessage("저장에 성공했습니다."));
    }
        saveMessages(request, msg);
       
        List modelingList =  sqlMap.queryForList("Modeling.getModeling", ""+projectForm.getProUid()); // Project Uid Modeling Get
        /***
         * List<Modeling> 으로 안하고 List로 했는지(?)
         */
       
        /** Modeling.getModeling query
         *
         * SELECT MO_UID         AS moUid
             ,MO_PROJECT    AS moProject
             ,MO_BR         AS moBr
             ,MO_SELF       AS moSelf
             ,MO_PRE        AS moPre
             ,MO_DEPTH      AS moDepth
             ,MO_ORDER      AS moOrder
             ,MO_TYPE       AS moType
             ,MO_IMG        AS moImg
             ,MO_POSX       AS moPosx
             ,MO_POSY       AS moPosy
             ,MO_NAME       AS moName
             ,MO_PU_EA      AS moPuEa
             ,MO_PU_NAME    AS moPuName
             ,MO_PU_VALUE   AS moPuValue
             ,MO_PU_ORDER   AS moPuOrder
             ,MO_IN         AS moIn
             ,MO_OUT        AS moOut
             ,MO_TREE       AS moTree
             ,MO_TAG_ID     AS moTagId
             ,MO_PU_CONNECT AS moPuConnect
             ,MO_PB_UID     AS moPbUid
       FROM MODELING
      WHERE MO_PROJECT = #value#
         */
       
        HashMap<String, ArrayList<Modeling>> cenarioMap = new HashMap<String, ArrayList<Modeling>>();
        Vector<Modeling> modelingVector = new Vector<Modeling>(modelingList.size()); //modelingList를 Vetor로 변경하기 위한 객체 선언
        ArrayList<SampleBean> sampleBean = new ArrayList<SampleBean>();
        modelingVector.addAll(modelingList); //Vetor 에 List 값 적용
        for (int i=0;i<modelingVector.size();i++) {
            ArrayList<Modeling> cenarioModeling = (ArrayList<Modeling>)sqlMap.queryForList("Modeling.getSNModeling", ""+modelingVector.get(i).getMoSelf());
            /**
             * Modeling.getSNModeling query
             * SELECT * FROM (SELECT SNMO_UID         AS moUid
               ,SNMO_PROJECT    AS moProject
               ,SNMO_BR         AS moBr
               ,SNMO_SELF       AS moSelf
               ,SNMO_PRE        AS moPre
               ,SNMO_DEPTH      AS moDepth
               ,SNMO_ORDER      AS moOrder
               ,SNMO_TYPE       AS moType
               ,SNMO_IMG        AS moImg
               ,SNMO_POSX       AS moPosx
               ,SNMO_POSY       AS moPosy
               ,SNMO_NAME       AS moName
               ,SNMO_PU_EA      AS moPuEa
               ,SNMO_PU_NAME    AS moPuName
               ,SNMO_PU_VALUE   AS moPuValue
               ,SNMO_PU_ORDER   AS moPuOrder
               ,SNMO_IN         AS moIn
               ,SNMO_OUT        AS moOut
               ,SNMO_TREE       AS moTree
               ,SNMO_TAG_ID     AS moTagId
               ,SNMO_PU_CONNECT AS moPuConnect
               ,SNMO_PB_UID     AS moPbUid
        FROM SCENARIOMODELING
            WHERE MO_PK = #value#
      UNION ALL
      SELECT MO_UID         AS moUid
                   ,MO_PROJECT    AS moProject
                   ,MO_BR         AS moBr
                   ,MO_SELF       AS moSelf
                   ,MO_PRE        AS moPre
                   ,MO_DEPTH      AS moDepth
                   ,MO_ORDER      AS moOrder
                   ,MO_TYPE       AS moType
                   ,MO_IMG        AS moImg
                   ,MO_POSX       AS moPosx
                   ,MO_POSY       AS moPosy
                   ,MO_NAME       AS moName
                   ,MO_PU_EA      AS moPuEa
                   ,MO_PU_NAME    AS moPuName
                   ,MO_PU_VALUE   AS moPuValue
                   ,MO_PU_ORDER   AS moPuOrder
                   ,MO_IN         AS moIn
                   ,MO_OUT        AS moOut
                   ,MO_TREE       AS moTree
                   ,MO_TAG_ID     AS moTagId
                   ,MO_PU_CONNECT AS moPuConnect
                   ,MO_PB_UID     AS moPbUid
      FROM MODELING
            WHERE MO_SELF = #value#)
      ORDER BY moSelf ASC
             */
            if (cenarioModeling != null) {
              cenarioMap.put(modelingVector.get(i).getMoSelf(), cenarioModeling);
            }
            if (modelingVector.get(i).getSamplesList().size()>0) {
              sampleBean.addAll(modelingVector.get(i).getSamplesList());
            }
        }
       
        //cenarioList.add(sampleBean);
        //System.out.println("가로사이즈-->"+modelingVector.size());
        //System.out.println(sampleBean.size());
       
        //System.out.println(sampleBean.size());
        ArrayList<String> keyArr = new ArrayList<String>();
        //ArrayList<ArrayList<SampleBean>> cenarioList = new ArrayList<ArrayList<SampleBean>>(); // 시나리오 관련 최종 데이터 저장소
       
        //ArrayList<SampleBean> tempSampleBean = new ArrayList<SampleBean>(); // 시나리오 데이터 임시 저장소
     // 시나리오 관련 모드일경우
       
       
        if (true) {
            this.fnCenario(modelingVector, keyArr, cenarioMap, sampleEngine, projectForm, sampleBean);
        }
        System.out.println("keyArr.length : " + keyArr.size());
        //시나리오 관련 종료
       
        ArrayList<Figures> figList = (ArrayList<Figures>) sqlMap.queryForList("Figures.figures", new Figures(projectForm));
        samplebean.setFigProjectUid(projectForm.getProUid());
        //sampleBean = (ArrayList<SampleBean>) sqlMap.queryForList("Sample.figures",samplebean);
        //System.out.println("sampleBean.size() : " + sampleBean.size());
        Sampleform sampleform = sampleEngine.engineCore(projectForm,sampleBean,simulationArr);
       
      //시작 경제성 계산
        /*
        EconomicAnalysis _EconomicAnalysis = new EconomicAnalysis();
        int economicResulut = 0;
        int tempResult = 0;
        for (int i=0;i<economicList.size();i++) {
          economicList.get(i).setLifeTime(sampleform.getLifeTime());
         
          economicList.get(i).setCP(_EconomicAnalysis.compute(economicList.get(i)));
          System.out.println(economicList.get(i).getCP());
          economicResulut = (int) (economicResulut + economicList.get(i).getCP());
        }
       
      int breakEconomicResulut = 0;
        System.out.println("economicResulut-->"+economicResulut);
        for (int i=0;i<sampleform.getBrakeArr().size();i++) {
          int temp1 = 0;
          for (int s=0;s<sampleform.getBrakeArr().get(i)[0].length;s++) {
            sampleform.getBrakeArr().get(i)[2][s] = (int) (economicList.get(s).getRepairCost()*sampleform.getBrakeArr().get(i)[0][s]);
            temp1 = temp1 + sampleform.getBrakeArr().get(i)[2][s];
          }
          System.out.println(temp1);
          breakEconomicResulut = breakEconomicResulut + temp1;
        }
        System.out.println(breakEconomicResulut);
        breakEconomicResulut = breakEconomicResulut/economicList.size();
       
        System.out.println("총계산 결과:"+breakEconomicResulut+"+"+economicResulut);*/
        //끝 경제성 계산
        // report 데이터 처리
        Report _Report = computeReport(sampleform,projectForm);
        int reportUid = (Integer) sqlMap.insert("Report.Insert", _Report);
        ArrayList<FigInform> figInformList;
        for (int i=0;i<figList.size();i++) {
            figInformList = new ArrayList<FigInform>();
            for (int s=0;s<sampleform.getIteration();s++) {
              FigInform inFig = new FigInform();
              inFig.setFigUid(figList.get(i).getFigUid());
              inFig.setHazardRate(0.1f);
              inFig.setRandomNum(0.01f);
              figInformList.add(inFig);
            }
            figList.get(i).setFigInform(figInformList);
        }
       
        SimulationFields[] simFieldsArr = new SimulationFields[sampleform.getIterationArr().length];       
        Float[] timeofsim = new Float[1];
        timeofsim[0] = (float)sampleform.getLifeTime();
       
        float temp = 0;
        for (int i=0;i<simFieldsArr.length;i++) {
            SimulationFields simfields = new SimulationFields();
            simfields.setAvailabilityValue(sampleform.getIterationArr()[i]*100);
            simfields.setTimeOfSimulation(timeofsim);
            simfields.setIterationStep(i);
            simfields.setRepairTime(0);
            simFieldsArr[i] = simfields;
            temp += sampleform.getIterationArr()[i];
           
           
        }
        simulationArr.put((String)session.getAttribute(Constants.SESSION_GETID), simFieldsArr);
        System.out.println("-------------------------------------------------> " + temp);
        //session.setAttribute("report", sampleform);
        request.setAttribute("reportUid", reportUid);
        request.setAttribute("simBaseForm", projectForm);
        request.setAttribute("figList", figList);
        request.setAttribute("simulationArr", simulationArr.get((String)session.getAttribute(Constants.SESSION_GETID)));
        return mapping.findForward("simulator");
    }
    /**
     * 시나리오 관련 함수
     * @param modelingVector
     * @param keyArr
     * @param cenarioMap
     * @param sampleEngine
     * @param projectForm
     * @param sampleBean
     * @throws Exception
     */
    public void fnCenario(
        Vector<Modeling> modelingVector,
        ArrayList<String> keyArr, 
        HashMap<String, ArrayList<Modeling>> cenarioMap,
        SampleEngineImpl sampleEngine,
        Project projectForm,
        ArrayList<SampleBean> sampleBean) throws Exception{
     
        int itemRepeat = 0;
        Modeling[][] cenarioList;
        ArrayList<Sampleform> cenarioReslut = new ArrayList<Sampleform>();
    for (int i=0;i<modelingVector.size();i++) { // key 값 세팅
        if (modelingVector.get(i).getSamplesList().size()>0) {
          keyArr.add(modelingVector.get(i).getMoSelf());
        }
      }
      for (int i=0;i<keyArr.size();i++) { // 시작위치에잇는 item의 반복 횟수
          itemRepeat = itemRepeat>0?itemRepeat*cenarioMap.get(keyArr.get(i)).size():cenarioMap.get(keyArr.get(i)).size();
      }
      cenarioList = new Modeling[itemRepeat][keyArr.size()];
    int thisCount = 0;
    System.out.println("keyArr.size() : " + keyArr.size());
      if (keyArr.size()>0) {
          for (int i=0;i<keyArr.size();i++) {
            //System.out.println("cenarioMap.get(keyArr.get(i)).size() : " + cenarioMap.get(keyArr.get(i)).size());
            int splitNum = 0;
            int arryNum = 0;
            if (i==0) {
              thisCount = 1;
              splitNum = itemRepeat/cenarioMap.get(keyArr.get(i)).size();
              for (int l=0;l<cenarioMap.get(keyArr.get(i)).size();l++) {
                for (int k=0;k<splitNum;k++) {
                  cenarioList[arryNum][i] = cenarioMap.get(keyArr.get(i)).get(l);
                  arryNum++;
                }
              }
            } else if (i==1){
              thisCount = thisCount*cenarioMap.get(keyArr.get(i)).size();
              splitNum = itemRepeat/cenarioMap.get(keyArr.get(i)).size();
              for (int k=0;k<splitNum;k++) {
                for (int l=0;l<cenarioMap.get(keyArr.get(i)).size();l++) {
                  cenarioList[arryNum][i] = cenarioMap.get(keyArr.get(i)).get(l);
                  arryNum++;
                }
              }
            } else {
              splitNum = itemRepeat/thisCount;
              System.out.println(splitNum+","+thisCount);
              if (cenarioMap.get(keyArr.get(i)).size()==1) {
                for (int k=0; k<itemRepeat;k++) {
                  cenarioList[arryNum][i] = cenarioMap.get(keyArr.get(i)).get(0);
                  arryNum++;
                }
              } else if (cenarioMap.get(keyArr.get(i)).size()>1) {
                int tempNum = 0;
                for (int l=0;l<=itemRepeat;l++) {
                  if (l == 0) continue;
                cenarioList[arryNum][i] = cenarioMap.get(keyArr.get(i)).get(tempNum);
                arryNum++;
                if (l%thisCount == 0 && l>1) tempNum++;
                if (tempNum==cenarioMap.get(keyArr.get(i)).size()) tempNum=0;
                }
              }
              thisCount = thisCount*cenarioMap.get(keyArr.get(i)).size();
            }
          }
      }
      //System.out.println("총루프횟수:"+cenarioList.size());
      long start = System.currentTimeMillis();
      for (int i=0;i<cenarioList.length;i++) {
            ArrayList<SampleBean> cenariosampleBean = new ArrayList<SampleBean>();
            for (int j=0;j<cenarioList[0].length;j++) {
              //System.out.print(","+cenarioList[i][j].getSamplesList().size());
              if (cenarioList[i][j].getSamplesList().size()>0) {
                cenariosampleBean.addAll(cenarioList[i][j].getSamplesList());
              }
              //cenariosampleBean.addAll(cenarioList[i][j].getSamplesList());
            }
            cenarioReslut.add(sampleEngine.engineCore(projectForm,cenariosampleBean,simulationArr));
            //cenariosampleBean.clear();
            //System.out.println();
      }
      long end = System.currentTimeMillis();
    log.debug( "시나리오 실행 시간 : " + ( end - start )/1000.0 + "초" );
    int topNum = 0;
    float topAve = 0f;
    for (int i=0;i<cenarioReslut.size();i++) {
      if (topAve<cenarioReslut.get(i).getTotAvailability()) {
        topAve = cenarioReslut.get(i).getTotAvailability();
        topNum = i;
      }
    }
    System.out.println(topAve+",,,"+topNum);
    sampleBean = new ArrayList<SampleBean>();
    for (int i=0;i<cenarioList[topNum].length;i++) {
      sampleBean.addAll(cenarioList[topNum][i].getSamplesList());
    }
   
    }

    /**
     * 리포트 결과값을 계산합니다
     * @param sampleform
     * @return Report
     */
    public Report computeReport(Sampleform sampleform,Project projectForm) {
        Report reportBean = new Report();
        reportBean.setProUid(projectForm.getProUid());
        reportBean.setSampleCount(sampleform.getIteration());
        reportBean.setSampleAve(sampleform.getTotAvailability());
        reportBean.setIterationArr(sampleform.getIterationArr());
        reportBean.setStepFigName(sampleform.getStepFigName());
        if (reportBean.getIterationArr() != null) {
          for (int i=0;i<reportBean.getIterationArr().length;i++) {
            reportBean.setTempiterationArr((reportBean.getTempiterationArr()+String.valueOf(reportBean.getIterationArr()[i]+"||")).trim());
            }
        }
        /*if (reportBean.getStepFigName() != null) {
          for (int i=0;i<reportBean.getStepFigName().length;i++) {
            reportBean.setTempstepFigName((reportBean.getTempstepFigName()+reportBean.getStepFigName()[i]+"||").trim());
            }
        }*/
        if (sampleform.getStepAve()[0].length > 0) {
          String TempstepFigName = "";
          for (int i=0;i<sampleform.getStepAve()[0].length;i++) {
            TempstepFigName += sampleform.getStepAve()[0][i]+";;;"+sampleform.getStepAve()[1][i]+"||";
            TempstepFigName.trim();
            }
          reportBean.setTempstepFigName(TempstepFigName);
        }
        //표준편차
        for (int i=0;i<reportBean.getIterationArr().length;i++) {
          reportBean.setVariance(reportBean.getVariance()+Math.pow(((double)(reportBean.getIterationArr()[i]*100)-sampleform.getTotAvailability()),2d));
        }
        reportBean.setVariance(reportBean.getVariance()/(sampleform.getIteration()-1));
        reportBean.setStdDeviation(Math.sqrt(reportBean.getVariance()));
        //신뢰수준 68%
        reportBean.setConfidenceLevel68st(reportBean.getSampleAve()-(reportBean.getStdDeviation()/Math.sqrt(reportBean.getSampleCount())));
        reportBean.setConfidenceLevel68ed(reportBean.getSampleAve()+(reportBean.getStdDeviation()/Math.sqrt(reportBean.getSampleCount())));
        //신뢰수준 95%
        reportBean.setConfidenceLevel95st(reportBean.getSampleAve()-1.96*(reportBean.getStdDeviation()/Math.sqrt(reportBean.getSampleCount())));
        reportBean.setConfidenceLevel95ed(reportBean.getSampleAve()+1.96*(reportBean.getStdDeviation()/Math.sqrt(reportBean.getSampleCount())));
        //신뢰수준 99%
        reportBean.setConfidenceLevel99st(reportBean.getSampleAve()-2.54*(reportBean.getStdDeviation()/Math.sqrt(reportBean.getSampleCount())));
        reportBean.setConfidenceLevel99ed(reportBean.getSampleAve()+2.54*(reportBean.getStdDeviation()/Math.sqrt(reportBean.getSampleCount())));
       
        return reportBean;
    }
   
   
    /**
     * 프로젝트의 값을 수정합니다.
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public ActionForward update(ActionMapping mapping,
                                ActionForm form,
                                HttpServletRequest request,
                                HttpServletResponse response) throws Exception {
        Project projectForm = (Project)form;
        HttpSession session = request.getSession();
        session.setAttribute("proUid", projectForm.getProUid());
        ActionMessages msg = new ActionMessages();
        int message = -1;
        message = (Integer) sqlMap.update("Project.projectUpdate", projectForm);
               if(message == 0){
                   msg.add("message", new ActionMessage("저장에 실패했습니다."));
               }else if(message > 0){
                   msg.add("message", new ActionMessage("저장에 성공했습니다."));
                   int proUid = projectForm.getProUid();
                   sqlMap.insert("Project.projectLogInsert", proUid);
               }
        saveMessages(request, msg);              
        request.setAttribute("projectData", projectForm);
        return mapping.findForward("update");
    }
   
    /**
     * 프로젝트의 값을 수정합니다.
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public ActionForward simulationUpdate(ActionMapping mapping,
                                ActionForm form,
                                HttpServletRequest request,
                                HttpServletResponse response) throws Exception {
        Project projectForm = (Project)form;
        HttpSession session = request.getSession();
        session.setAttribute("proUid", projectForm.getProUid());
        ActionMessages msg = new ActionMessages();
        int message = -1;
        message = (Integer) sqlMap.update("Project.simulatorUpdate", projectForm);
               if(message == 0){
                   msg.add("message", new ActionMessage("저장에 실패했습니다."));
               }else if(message > 0){
                   msg.add("message", new ActionMessage("저장에 성공했습니다."));
               }
        saveMessages(request, msg);              
        request.setAttribute("projectForm", projectForm);
        return mapping.findForward("simulatorUpdate");
    }   
   
    /**
     * 프로젝트를 삭제합니다.
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    @SuppressWarnings("deprecation")
  public ActionForward delete(ActionMapping mapping,
            ActionForm form,
            HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        Project projectForm = (Project)form;
        HttpSession session = request.getSession();
        session.removeAttribute("proUid");
        ActionMessages msg = new ActionMessages();
        int message = -1;
            message = (Integer) sqlMap.delete("Project.projectDelete", projectForm)// PROJECT
                                sqlMap.delete("Project.modelingDelete", projectForm); // MODELING
                                sqlMap.delete("Project.figuresDelete", projectForm)// FIGURES
            if(message == 0){
                msg.add("message", new ActionMessage("삭제에 실패했습니다."));
            }else if(message > 0){
                msg.add("message", new ActionMessage("삭제에 성공했습니다."));
            }
            saveMessages(request, msg);
                request.setAttribute("projectData", projectForm);
        return mapping.findForward("delete");
    }

    /**
     * 프로젝트를 import합니다.
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public ActionForward projectImport(ActionMapping mapping,
            ActionForm form,
            HttpServletRequest request,
            HttpServletResponse response) throws Exception {
      ImportBean importBean = (ImportBean)form;
    HttpSession session = request.getSession();

      log.debug(importBean.getImportfile().getFileName());
      PoiManager result = new PoiManager();
      result.excelData(importBean.getImportfile(),(String)session.getAttribute(Constants.SESSION_UNIT_ID));
        return mapping.findForward("impSuccess");
    }
   
    /**
     * 프로젝트를 import합니다.
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
   
    public ActionForward LinkerImport(ActionMapping mapping,
            ActionForm form,
            HttpServletRequest request,
            HttpServletResponse response) throws Exception {
     
       Enumeration eParam = request.getParameterNames();
       eParam.hasMoreElements();
       String LinkData = (String)eParam.nextElement();
      
       String[] DataArr = LinkData.split("┐")
      
       String ProjectName = DataArr[0];
       String[] curArr = DataArr[1].split("┗");
      
     
      //ImportBean importBean = (ImportBean)form;
    HttpSession session = request.getSession();
    //form.getMultipartRequestHandler();
      //log.debug(importBean.getImportfile().getFileName());
      PoiManager result = new PoiManager();
      //result.excelData(importBean.getImportfile(),(String)session.getAttribute(Constants.SESSION_UNIT_ID));
      int proUid = result.LinkData(curArr, "admin");
     
      Project projectForm = new Project();
      projectForm.setProUid(proUid);
      projectForm.setProIterNum(50);
      projectForm.setProStartTime(0);
      projectForm.setProLifeTime(20);
      projectForm.setProTd(365);
     
      SampleEngineImpl sampleEngine = new SampleEngineImpl();
        SampleBean samplebean = new SampleBean();
     
        ActionMessages msg = new ActionMessages();
        int message = -1;
        message = (Integer) sqlMap.update("Project.simulatorUpdate", projectForm);
        if(message == 0){
      msg.add("message", new ActionMessage("저장에 실패했습니다."));
    }else if(message > 0){
      msg.add("message", new ActionMessage("저장에 성공했습니다."));
    }
        saveMessages(request, msg);
       
        List modelingList =  sqlMap.queryForList("Modeling.getModeling", ""+projectForm.getProUid()); // Project Uid Modeling Get
       
        HashMap<String, ArrayList<Modeling>> cenarioMap = new HashMap<String, ArrayList<Modeling>>();
        Vector<Modeling> modelingVector = new Vector<Modeling>(modelingList.size()); //modelingList를 Vetor로 변경하기 위한 객체 선언
        ArrayList<SampleBean> sampleBean = new ArrayList<SampleBean>();
        modelingVector.addAll(modelingList); //Vetor 에 List 값 적용
        for (int i=0;i<modelingVector.size();i++) {
        ArrayList<Modeling> cenarioModeling = (ArrayList<Modeling>)sqlMap.queryForList("Modeling.getSNModeling", ""+modelingVector.get(i).getMoSelf());
        if (cenarioModeling != null) {
            cenarioMap.put(modelingVector.get(i).getMoSelf(), cenarioModeling);
          }
          if (modelingVector.get(i).getSamplesList().size()>0) {
            sampleBean.addAll(modelingVector.get(i).getSamplesList());
          }
        }
       
        ArrayList<Figures> figList = (ArrayList<Figures>) sqlMap.queryForList("Figures.figures", new Figures(projectForm));
        samplebean.setFigProjectUid(projectForm.getProUid());
        //sampleBean = (ArrayList<SampleBean>) sqlMap.queryForList("Sample.figures",samplebean);
        //System.out.println("sampleBean.size() : " + sampleBean.size());
        Sampleform sampleform = sampleEngine.engineCore(projectForm,sampleBean,simulationArr);
       
        SimulationFields[] simFieldsArr = new SimulationFields[sampleform.getIterationArr().length];
       
        float AveAvailability = 0;
        for (int i=0;i<simFieldsArr.length;i++) {
          AveAvailability += sampleform.getIterationArr()[i];
        }
       
        request.setAttribute("AveAvailability", AveAvailability);
        request.setAttribute("ProjectName", ProjectName);
      return mapping.findForward("LinkerSucess");
    }
}
TOP

Related Classes of com.ordobill.webapp.action.ProjectAction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.