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