| | |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import java.io.IOException; |
| | | import java.text.ParseException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.*; |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | // 날짜 유효성 체크 |
| | | /** |
| | | * 날짜 유효성 체크 |
| | | * @param startDate 시작 일자(문자) |
| | | * @param completeDate 종료 일자(문자) |
| | | */ |
| | | private void checkStartCompleteDate(String startDate, String completeDate) { |
| | | if (!StringUtils.isEmpty(startDate) && !StringUtils.isEmpty(completeDate)) { |
| | | Date start = DateUtil.convertStrToDate(startDate, "yy-MM-dd"); |
| | | Date end = DateUtil.convertStrToDate(completeDate, "yy-MM-dd"); |
| | | if (start.getTime() > end.getTime()) { |
| | | throw new OwlRuntimeException( |
| | | this.messageAccessor.getMessage(MsgConstants.DATE_PICKER_NOT_AVAILABLE)); |
| | | } |
| | | checkStartCompleteDate(start, end); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 날짜 유효성 체크 |
| | | * @param start 시작 일자 |
| | | * @param end 종료 일자 |
| | | */ |
| | | private void checkStartCompleteDate(Date start, Date end) { |
| | | if (start.getTime() > end.getTime()) { |
| | | throw new OwlRuntimeException( |
| | | this.messageAccessor.getMessage(MsgConstants.DATE_PICKER_NOT_AVAILABLE)); |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | /** |
| | | * cell NULL 체크 함수 |
| | | * 문자형식 cell 체크 |
| | | * @param cell Cell |
| | | * @return boolean |
| | | */ |
| | | private Boolean cellNullCheck (Cell cell, int rowIndex) { |
| | | boolean result = false; |
| | | |
| | | // 문자형식인지 체크 |
| | | if (cell != null && cell.getCellType() != Cell.CELL_TYPE_BLANK && cell.getCellType() != Cell.CELL_TYPE_STRING) { |
| | | throw new OwlRuntimeException( |
| | | this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_NOT_STRING_TYPE, rowIndex)); |
| | | private Boolean cellNullCheck (Cell cell) { |
| | | if (cell != null ) { |
| | | if (cell.getCellType() != Cell.CELL_TYPE_BLANK) { |
| | | if (cell.getCellType() == Cell.CELL_TYPE_STRING && cell.getStringCellValue() != null) { |
| | | return false; |
| | | } |
| | | } |
| | | } |
| | | // 공백 제거 |
| | | if (cell != null && cell.getStringCellValue() != null) { |
| | | cell.setCellValue(cell.getStringCellValue().trim()); |
| | | } |
| | | |
| | | if (cell != null && cell.getCellType() != Cell.CELL_TYPE_BLANK && cell.getCellType() == cell.CELL_TYPE_STRING |
| | | && cell.getStringCellValue() != null && !cell.getStringCellValue().equals("")) { |
| | | result = true; |
| | | } |
| | | |
| | | return result; |
| | | return true; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | // 엑셀 필드에 있는 정보를 이슈 form 으로 옮긴다. |
| | | private IssueForm setIssueFormToExcelField(Row row, int rowIndex, Map<String, Priority> priorityMaps, |
| | | Map<String, Severity> severityMaps, Map<String, DepartmentVo> departmentMaps, |
| | | Map<String, CustomField> customFieldMaps, Map<String, CompanyField> companyFieldMaps, |
| | | Map<String, IspField> ispFieldMaps, Map<String, HostingField> hostingFieldMaps, |
| | | List<String> headers) { |
| | | List<String> headers) throws ParseException { |
| | | IssueForm issueForm = new IssueForm(); |
| | | issueForm.setRegisterId(this.webAppUtil.getLoginId()); |
| | | Project project = null; |
| | |
| | | // 제목, 내용, 프로젝트 키, 이슈 타입, 우선순위, 중요도, 담당자, 시작일, 종료일, 사용자 정의 필드 |
| | | for (int cellIndex = 0; cellIndex < headers.size(); cellIndex++) { |
| | | Cell cell = row.getCell(cellIndex); |
| | | boolean isNull = cellNullCheck(cell); |
| | | |
| | | String cellStr = ""; |
| | | if (!isNull) { |
| | | cellStr = CommonUtil.convertExcelStringToCell(cell); |
| | | |
| | | // 공백 제거 |
| | | cell.setCellValue(cellStr.trim()); |
| | | } else { |
| | | cell.setCellValue(cellStr); |
| | | } |
| | | |
| | | switch (cellIndex) { |
| | | case 0: |
| | | // 이슈 제목을 IssueForm 에 저장한다. |
| | | this.setIssueFormTitle(cell, issueForm, rowIndex); |
| | | if (isNull) { |
| | | throw new OwlRuntimeException( |
| | | this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_ISSUE_TITLE_IS_NULL, rowIndex)); |
| | | } |
| | | this.setIssueFormTitle(cellStr, issueForm, rowIndex); |
| | | break; |
| | | |
| | | case 1: // 내용 |
| | | if (cellNullCheck(cell, rowIndex)) { |
| | | issueForm.setDescription(CommonUtil.convertExcelStringToCell(cell)); |
| | | } else { |
| | | // null 입력 방지 |
| | | issueForm.setDescription(""); |
| | | } |
| | | |
| | | issueForm.setDescription(cellStr); |
| | | break; |
| | | |
| | | case 2: |
| | | // 우선순위를 IssueForm 에 저장한다. |
| | | this.setIssueFormPriority(cell, priorityMaps, issueForm, rowIndex); |
| | | if (isNull) { |
| | | throw new OwlRuntimeException( |
| | | this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_PRIORITY_IS_NULL, rowIndex)); |
| | | } |
| | | this.setIssueFormPriority(cellStr, priorityMaps, issueForm, rowIndex); |
| | | break; |
| | | |
| | | case 3: |
| | | // 중요도를 IssueForm 에 저장한다. |
| | | this.setIssueFormSeverity(cell, severityMaps, issueForm, rowIndex); |
| | | if (isNull) { |
| | | throw new OwlRuntimeException( |
| | | this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_SEVERITY_IS_NULL, rowIndex)); |
| | | } |
| | | this.setIssueFormSeverity(cellStr, severityMaps, issueForm, rowIndex); |
| | | break; |
| | | /*case 6: |
| | | // 담당자를 IssueForm 에 저장한다. |
| | |
| | | break;*/ |
| | | case 4: |
| | | // 시작일을 IssueForm 에 저장한다. |
| | | if (cell != null && cell.getCellType() != Cell.CELL_TYPE_BLANK) { |
| | | this.setIssueFormPeriod(cell, issueForm, true, rowIndex); |
| | | } |
| | | this.setIssueFormPeriod(cellStr, issueForm, true, rowIndex, isNull); |
| | | break; |
| | | case 5: |
| | | // 종료일을 IssueForm 에 저장한다. |
| | | if (cell != null && cell.getCellType() != Cell.CELL_TYPE_BLANK) { |
| | | this.setIssueFormPeriod(cell, issueForm, false, rowIndex); |
| | | } |
| | | this.setIssueFormPeriod(cellStr, issueForm, false, rowIndex, isNull); |
| | | break; |
| | | case 6: |
| | | // 업체를 IssueForm 에 저장한다. |
| | | if (cellNullCheck(cell, rowIndex)) { |
| | | this.setIssueFormCompanyField(cell, companyFieldMaps, issueForm, rowIndex); |
| | | } |
| | | this.setIssueFormCompanyField(cellStr, companyFieldMaps, issueForm, rowIndex); |
| | | break; |
| | | case 7: |
| | | // ISP를 IssueForm 에 저장한다. |
| | | if (cellNullCheck(cell, rowIndex)) { |
| | | this.setIssueFormIspField(cell, ispFieldMaps, issueForm, rowIndex); |
| | | } |
| | | this.setIssueFormIspField(cellStr, ispFieldMaps, issueForm, rowIndex); |
| | | break; |
| | | case 8: |
| | | // 호스팅을 IssueForm 에 저장한다. |
| | | if (cellNullCheck(cell, rowIndex)) { |
| | | this.setIssueFormHostingField(cell, hostingFieldMaps, issueForm, rowIndex); |
| | | } |
| | | this.setIssueFormHostingField(cellStr, hostingFieldMaps, issueForm, rowIndex); |
| | | break; |
| | | default: |
| | | // 9번 부터는 사용자 정의 필드. 사용자 정의 필드 정보를 IssueForm 에 저장한다. |
| | | this.setIssueFormCustomFieldValue(cell, customFieldMaps, issueForm, headers.get(cellIndex), rowIndex); |
| | | this.setIssueFormCustomFieldValue(cellStr, customFieldMaps, issueForm, headers.get(cellIndex), rowIndex); |
| | | } |
| | | } |
| | | |
| | | return issueForm; |
| | | } |
| | | |
| | | private void setIssueFormHostingField(Cell cell, Map<String, HostingField> hostingFieldMaps, IssueForm issueForm, int rowIndex) { |
| | | if (cell != null) { |
| | | private void setIssueFormHostingField(String cell, Map<String, HostingField> hostingFieldMaps, IssueForm issueForm, int rowIndex) { |
| | | if (cell.length() > 0) { |
| | | Map<String, Object> issueHostingFields = new HashMap<>(); |
| | | HostingField hostingFieldMap = hostingFieldMaps.get(CommonUtil.convertExcelStringToCell(cell)); |
| | | HostingField hostingFieldMap = hostingFieldMaps.get(cell); |
| | | if (hostingFieldMap == null) { |
| | | throw new OwlRuntimeException( |
| | | this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_HOSTING_NOT_EXIST, rowIndex)); |
| | |
| | | } |
| | | } |
| | | |
| | | private void setIssueFormIspField(Cell cell, Map<String, IspField> ispFieldMaps, IssueForm issueForm, int rowIndex) { |
| | | if (cell != null) { |
| | | private void setIssueFormIspField(String cell, Map<String, IspField> ispFieldMaps, IssueForm issueForm, int rowIndex) { |
| | | if (cell.length() > 0) { |
| | | Map<String, Object> issueIspFields = new HashMap<>(); |
| | | IspField ispFieldMap = ispFieldMaps.get(CommonUtil.convertExcelStringToCell(cell)); |
| | | IspField ispFieldMap = ispFieldMaps.get(cell); |
| | | if (ispFieldMap == null) { |
| | | throw new OwlRuntimeException( |
| | | this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_ISP_NOT_EXIST, rowIndex)); |
| | |
| | | } |
| | | } |
| | | |
| | | private void setIssueFormCompanyField(Cell cell, Map<String, CompanyField> companyFieldMaps, IssueForm issueForm, int rowIndex) { |
| | | if (cell != null) { |
| | | private void setIssueFormCompanyField(String cell, Map<String, CompanyField> companyFieldMaps, IssueForm issueForm, int rowIndex) { |
| | | if (cell.length() > 0) { |
| | | Map<String, Object> issueCompanyFields = new HashMap<>(); |
| | | CompanyField companyFieldMap = companyFieldMaps.get(CommonUtil.convertExcelStringToCell(cell)); |
| | | CompanyField companyFieldMap = companyFieldMaps.get(cell); |
| | | if (companyFieldMap == null) { |
| | | throw new OwlRuntimeException( |
| | | this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_COMPANY_NOT_EXIST, rowIndex)); |
| | |
| | | } |
| | | |
| | | // 이슈 제목을 IssueForm 에 저장한다. |
| | | private void setIssueFormTitle(Cell cell, IssueForm issueForm, int rowIndex) { |
| | | if (!cellNullCheck(cell, rowIndex)) { |
| | | throw new OwlRuntimeException( |
| | | this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_ISSUE_TITLE_IS_NULL, rowIndex)); |
| | | } |
| | | |
| | | String title = CommonUtil.convertExcelStringToCell(cell); |
| | | |
| | | private void setIssueFormTitle(String title, IssueForm issueForm, int rowIndex) { |
| | | // 제목 유효성 체크 |
| | | this.verifyTitle(title); |
| | | issueForm.setTitle(title); |
| | |
| | | |
| | | |
| | | // 우선순위를 IssueForm 에 저장한다. |
| | | private void setIssueFormPriority(Cell cell, Map<String, Priority> priorityMaps, IssueForm issueForm, int rowIndex) { |
| | | if (!cellNullCheck(cell, rowIndex)) { |
| | | throw new OwlRuntimeException( |
| | | this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_PRIORITY_IS_NULL, rowIndex)); |
| | | } |
| | | |
| | | Priority priority = priorityMaps.get(CommonUtil.convertExcelStringToCell(cell)); |
| | | private void setIssueFormPriority(String priorityStr, Map<String, Priority> priorityMaps, IssueForm issueForm, int rowIndex) { |
| | | Priority priority = priorityMaps.get(priorityStr); |
| | | |
| | | if (priority == null) { |
| | | throw new OwlRuntimeException( |
| | |
| | | } |
| | | |
| | | // 중요도를 IssueForm 에 저장한다. |
| | | private void setIssueFormSeverity(Cell cell, Map<String, Severity> severityMaps, IssueForm issueForm, int rowIndex) { |
| | | if (!cellNullCheck(cell, rowIndex)) { |
| | | throw new OwlRuntimeException( |
| | | this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_SEVERITY_IS_NULL, rowIndex)); |
| | | } |
| | | |
| | | Severity severity = severityMaps.get(CommonUtil.convertExcelStringToCell(cell)); |
| | | private void setIssueFormSeverity(String strSeverity, Map<String, Severity> severityMaps, IssueForm issueForm, int rowIndex) { |
| | | Severity severity = severityMaps.get(strSeverity); |
| | | |
| | | if (severity == null) { |
| | | throw new OwlRuntimeException( |
| | |
| | | } |
| | | } |
| | | // 시작일, 종료일을 IssueForm 에 저장한다. |
| | | private void setIssueFormPeriod(Cell cell, IssueForm issueForm, Boolean checkStartDate, int rowIndex) { |
| | | if (cell != null && !cell.toString().equals("")) { |
| | | private void setIssueFormPeriod(String periodDate, IssueForm issueForm, Boolean checkStartDate, int rowIndex, boolean isNull) throws ParseException { |
| | | if (!isNull) { |
| | | |
| | | // 값이 공백이면 중지 |
| | | String cellValue = CommonUtil.convertExcelStringToCell(cell); |
| | | if (StringUtils.isEmpty(cellValue) || cell.toString().equals("null")) { |
| | | return; |
| | | } |
| | | |
| | | if (cell.toString().length() < 10 && cell.toString().contains("-")) { //날짜 형식 체크 |
| | | throw new OwlRuntimeException( |
| | | this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_PERIOD_NOT_DASH, rowIndex)); |
| | | } |
| | | |
| | | Date startDate; |
| | | |
| | | try { |
| | | startDate = cell.getDateCellValue(); |
| | | } catch (Exception e) { |
| | | Date startDate = DateUtil.convertStrToDateOnly(periodDate); |
| | | if (startDate == null) { |
| | | throw new OwlRuntimeException( |
| | | this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_PERIOD_NOT_VALIDITY_EMPTY, rowIndex)); |
| | | } |
| | | |
| | | if (checkStartDate) { |
| | | issueForm.setStartDate(DateUtil.convertDateToStr(startDate, "yyyy-MM-dd")); |
| | | issueForm.setStartDate(periodDate); |
| | | } else { |
| | | issueForm.setCompleteDate(DateUtil.convertDateToStr(startDate, "yyyy-MM-dd")); |
| | | issueForm.setCompleteDate(periodDate); |
| | | |
| | | // 종료일만 입력 했을 경우 |
| | | if (issueForm.getCompleteDate() != null && issueForm.getStartDate() == null) { |
| | |
| | | } |
| | | |
| | | // 사용자 정의 필드 정보를 IssueForm 에 저장한다.- |
| | | private void setIssueFormCustomFieldValue(Cell cell, Map<String, CustomField> customFieldMaps, IssueForm issueForm, String customFieldName, int rowIndex) { |
| | | if (cell != null) { |
| | | String cellValue = CommonUtil.convertExcelStringToCell(cell); |
| | | Map<String, Object> issueCustomFieldMap = new HashMap<>(); |
| | | CustomField customField = customFieldMaps.get(customFieldName); |
| | | private void setIssueFormCustomFieldValue(String cellValue, Map<String, CustomField> customFieldMaps, IssueForm issueForm, String customFieldName, int rowIndex) { |
| | | Map<String, Object> issueCustomFieldMap = new HashMap<>(); |
| | | CustomField customField = customFieldMaps.get(customFieldName); |
| | | |
| | | if (customField == null) { |
| | | throw new OwlRuntimeException( |
| | | this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_HEADER_CUSTOM_FIELD_NOT_EXIST, rowIndex)); |
| | | } |
| | | // 사용자 정의 필드 값이 공백이면 중지 |
| | | if (StringUtils.isEmpty(cellValue)) { |
| | | return; |
| | | } |
| | | if (customField == null) { |
| | | throw new OwlRuntimeException( |
| | | this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_HEADER_CUSTOM_FIELD_NOT_EXIST, rowIndex)); |
| | | } |
| | | // 사용자 정의 필드 값이 공백이면 중지 |
| | | if (StringUtils.isEmpty(cellValue)) { |
| | | return; |
| | | } |
| | | |
| | | boolean validity = false; |
| | | boolean validity = false; |
| | | |
| | | switch (customField.getCustomFieldType()) { |
| | | case INPUT: |
| | | case NUMBER: |
| | | case DATETIME: |
| | | case IP_ADDRESS: |
| | | case EMAIL: |
| | | case SITE: |
| | | case TEL: |
| | | if (customField.getCustomFieldType() != INPUT && cellValue.length() > 100) { //INPUT 타입은 100자 제한 없음 |
| | | switch (customField.getCustomFieldType()) { |
| | | case INPUT: |
| | | case NUMBER: |
| | | case DATETIME: |
| | | case IP_ADDRESS: |
| | | case EMAIL: |
| | | case SITE: |
| | | case TEL: |
| | | if (customField.getCustomFieldType() != INPUT && cellValue.length() > 100) { //INPUT 타입은 100자 제한 없음 |
| | | throw new OwlRuntimeException( |
| | | this.messageAccessor.getMessage(MsgConstants.CUSTOM_FIELD_TEXT_TYPE_MAX_LENGTH_OUT)); |
| | | } |
| | | |
| | | if (customField.getCustomFieldType() == DATETIME) { //DATETIME일 경우 format 변경 |
| | | Date date = DateUtil.convertStrToDate(cellValue); |
| | | if (date == null) { |
| | | throw new OwlRuntimeException( |
| | | this.messageAccessor.getMessage(MsgConstants.CUSTOM_FIELD_TEXT_TYPE_MAX_LENGTH_OUT)); |
| | | this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_DATETIME_NOT_DASH, rowIndex)); |
| | | } |
| | | } |
| | | |
| | | if (customField.getCustomFieldType() == DATETIME) { //DATETIME일 경우 format 변경 |
| | | if (cell.toString().length() < 10 && cell.toString().contains("-")) { //날짜 형식 체크 |
| | | throw new OwlRuntimeException( |
| | | this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_DATETIME_NOT_DASH, rowIndex)); |
| | | } |
| | | Date date = cell.getDateCellValue(); |
| | | cellValue = new SimpleDateFormat("yyyy-MM-dd H:mm:ss").format(date); |
| | | issueCustomFieldMap.put("customFieldId", customField.getId()); |
| | | issueCustomFieldMap.put("useValue", cellValue); |
| | | issueForm.addIssueCustomFields(issueCustomFieldMap); |
| | | break; |
| | | case SINGLE_SELECT: |
| | | // 값 유효성 체크 |
| | | for (CustomFieldValue customFieldValue : customField.getCustomFieldValues()) { |
| | | if (customFieldValue.getValue().equals(cellValue)) { |
| | | validity = true; |
| | | break; |
| | | } |
| | | } |
| | | |
| | | issueCustomFieldMap.put("customFieldId", customField.getId()); |
| | | issueCustomFieldMap.put("useValue", cellValue); |
| | | issueForm.addIssueCustomFields(issueCustomFieldMap); |
| | | break; |
| | | case SINGLE_SELECT: |
| | | // 값 유효성 체크 |
| | | if (!validity) { |
| | | throw new OwlRuntimeException( |
| | | this.messageAccessor.getMessage(MsgConstants.EXCEL_CUSTOM_FIELD_VALUE_NOT_VALIDITY, rowIndex)); |
| | | } |
| | | |
| | | issueCustomFieldMap.put("customFieldId", customField.getId()); |
| | | issueCustomFieldMap.put("useValue", cellValue); |
| | | issueForm.addIssueCustomFields(issueCustomFieldMap); |
| | | |
| | | break; |
| | | case MULTI_SELECT: |
| | | // 값 유효성 체크 |
| | | String[] useValues = cellValue.split("#"); |
| | | // 해, 달 |
| | | for (String useValue : useValues) { |
| | | for (CustomFieldValue customFieldValue : customField.getCustomFieldValues()) { |
| | | if (customFieldValue.getValue().equals(cellValue)) { |
| | | |
| | | if (customFieldValue.getValue().equals(useValue)) { |
| | | validity = true; |
| | | break; |
| | | Map<String, Object> multiValueMap = new HashMap<>(); |
| | | multiValueMap.put("customFieldId", customField.getId()); |
| | | multiValueMap.put("useValue", useValue); |
| | | issueForm.addIssueCustomFields(multiValueMap); |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | if (!validity) { |
| | | throw new OwlRuntimeException( |
| | | this.messageAccessor.getMessage(MsgConstants.EXCEL_CUSTOM_FIELD_VALUE_NOT_VALIDITY, rowIndex)); |
| | | } |
| | | if (!validity) { |
| | | throw new OwlRuntimeException( |
| | | this.messageAccessor.getMessage(MsgConstants.EXCEL_CUSTOM_FIELD_VALUE_NOT_VALIDITY, rowIndex)); |
| | | } |
| | | |
| | | issueCustomFieldMap.put("customFieldId", customField.getId()); |
| | | issueCustomFieldMap.put("useValue", cellValue); |
| | | issueForm.addIssueCustomFields(issueCustomFieldMap); |
| | | |
| | | break; |
| | | case MULTI_SELECT: |
| | | // 값 유효성 체크 |
| | | String[] useValues = cellValue.split("#"); |
| | | // 해, 달 |
| | | for (String useValue : useValues) { |
| | | for (CustomFieldValue customFieldValue : customField.getCustomFieldValues()) { |
| | | |
| | | if (customFieldValue.getValue().equals(useValue)) { |
| | | validity = true; |
| | | Map<String, Object> multiValueMap = new HashMap<>(); |
| | | multiValueMap.put("customFieldId", customField.getId()); |
| | | multiValueMap.put("useValue", useValue); |
| | | issueForm.addIssueCustomFields(multiValueMap); |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | if (!validity) { |
| | | throw new OwlRuntimeException( |
| | | this.messageAccessor.getMessage(MsgConstants.EXCEL_CUSTOM_FIELD_VALUE_NOT_VALIDITY, rowIndex)); |
| | | } |
| | | |
| | | break; |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | |