| | |
| | | import com.fasterxml.jackson.core.type.TypeReference; |
| | | import com.fasterxml.jackson.databind.ObjectMapper; |
| | | import com.google.common.collect.Lists; |
| | | import com.google.gson.Gson; |
| | | import kr.wisestone.owl.constant.Regular; |
| | | import kr.wisestone.owl.domain.enumType.FileType; |
| | | import kr.wisestone.owl.type.LikeType; |
| | | import kr.wisestone.owl.vo.DepartmentVo; |
| | | import kr.wisestone.owl.vo.UserVo; |
| | | import org.apache.commons.codec.binary.*; |
| | | import org.apache.commons.codec.binary.Base64; |
| | | import org.apache.commons.lang3.RandomStringUtils; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.apache.poi.hssf.usermodel.HSSFDateUtil; |
| | | import org.apache.poi.ss.usermodel.Cell; |
| | | import org.jsoup.Jsoup; |
| | | import org.slf4j.Logger; |
| | |
| | | import java.security.MessageDigest; |
| | | import java.security.spec.KeySpec; |
| | | import java.text.DecimalFormat; |
| | | import java.text.ParseException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.*; |
| | | import java.util.regex.Matcher; |
| | | import java.util.regex.Pattern; |
| | | |
| | | public class CommonUtil { |
| | | private static final Logger LOGGER = LoggerFactory.getLogger(CommonUtil.class); |
| | |
| | | private static final String PASS_PHRASE = "1024"; // AES128 암호화에 사용 |
| | | private static final int ITERATION_COUNT = 10000; // AES128 암호화에 사용 |
| | | private static final int KEY_SIZE = 128; // AES128 암호화에 사용 |
| | | private static final String TMP_UPLOAD_FOLDER = "/tmpUploadFolder/"; // 이슈 생성, 수정에서 파일 업로드할 때 임시 폴더로 사용 |
| | | private static final String TMP_UPLOAD_FOLDER = "/tmpUploadFolder/"; // 이슈 생성, 수정에서 파일 업로드할 때 임시 폴더로 사용' |
| | | public static final String COMMA = ","; // 구분자 |
| | | |
| | | |
| | | public static String getClinetIp() { |
| | | try { |
| | |
| | | return fileMap; |
| | | } |
| | | |
| | | // string file 정보를 file Map 형태로 변경한다. |
| | | public static Map<String, Object> makeFileMap(String fileName, String file, String contentType) { |
| | | Map<String, Object> fileMap = new HashMap<>(); |
| | | |
| | | try { |
| | | byte[] bytes = Base64.decodeBase64(file); |
| | | |
| | | fileMap.put("fileName", fileName); |
| | | fileMap.put("fileSize", bytes.length); |
| | | fileMap.put("contentType", contentType); |
| | | fileMap.put("file", CommonUtil.bytesToFile(fileName, bytes)); |
| | | } catch (Exception e) { |
| | | LOGGER.debug(e.getMessage()); |
| | | } |
| | | |
| | | return fileMap; |
| | | } |
| | | |
| | | public static String getPostDataString(Map<String, String> params) throws UnsupportedEncodingException { |
| | | StringBuilder result = new StringBuilder(); |
| | | boolean first = true; |
| | |
| | | multipart.transferTo(convertFile); |
| | | } catch (IllegalStateException | IOException e) { |
| | | LOGGER.debug("multipart 파일 file 변환 오류"); |
| | | } |
| | | |
| | | return convertFile; |
| | | } |
| | | |
| | | // string을 파일로 변환 |
| | | public static File stringToFile(String fileName, String file) { |
| | | |
| | | byte[] bytes = null; |
| | | try { |
| | | bytes = Base64.decodeBase64(file); |
| | | |
| | | } catch (Exception ex) { |
| | | LOGGER.debug("string to bytes 변환 오류"); |
| | | } |
| | | |
| | | if (bytes != null) { |
| | | return bytesToFile(fileName, bytes); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | // bytes를 파일로 변환 |
| | | public static File bytesToFile(String fileName, byte[] bytes) { |
| | | File convertFile = new File(WebAppUtil.getContextRealPath() + TMP_UPLOAD_FOLDER + getFileNameByUUID(fileName)); |
| | | if (!convertFile.exists()) { |
| | | convertFile.mkdirs(); |
| | | } |
| | | |
| | | try{ |
| | | FileOutputStream lFileOutputStream = new FileOutputStream(convertFile); |
| | | lFileOutputStream.write(bytes); |
| | | lFileOutputStream.close(); |
| | | |
| | | }catch (IllegalStateException | IOException e) { |
| | | LOGGER.debug("bytes 파일 file 변환 오류"); |
| | | } |
| | | |
| | | return convertFile; |
| | |
| | | return stringBuilder.toString(); |
| | | } |
| | | |
| | | // DepartmentVos 에서 부서 정보를 추출해서 문자열로 리턴해준다. - 주로 엑셀 download 에서 사용된다. |
| | | public static String convertDepartmentVosToString(List<DepartmentVo> departmentVos) { |
| | | StringBuilder stringBuilder = new StringBuilder(); |
| | | int count = 0; |
| | | |
| | | for (DepartmentVo departmentVo : departmentVos) { |
| | | if (count > 0) { |
| | | stringBuilder.append("\n"); |
| | | } |
| | | |
| | | stringBuilder.append(departmentVo.getDepartmentName()); |
| | | count++; |
| | | } |
| | | return stringBuilder.toString(); |
| | | } |
| | | |
| | | public static List<Date> findSearchPeriod(Date startDate, Date endDate) { |
| | | Calendar cal = Calendar.getInstance(); |
| | | cal.setTime(endDate); |
| | | List<Date> days = Lists.newArrayList(); |
| | | |
| | | // 이번달 날짜 리스트 가져오기 |
| | | while (cal.getTime().after(startDate)){ |
| | | days.add(cal.getTime()); |
| | | cal.add(Calendar.DATE, -1); |
| | | } |
| | | |
| | | return days; |
| | | } |
| | | |
| | | // 검색 일자를 구한다. |
| | | public static List<Date> findSearchPeriod(String searchPeriod) { |
| | | List<Date> searchDates = Lists.newArrayList(); |
| | |
| | | |
| | | switch (cell.getCellType()) { |
| | | case Cell.CELL_TYPE_NUMERIC : |
| | | double doubleValue = cell.getNumericCellValue(); |
| | | int intValue; |
| | | |
| | | // 날짜 형식인 경우 날짜로 변환 |
| | | if (HSSFDateUtil.isCellDateFormatted(cell)) { |
| | | Date date = cell.getDateCellValue(); |
| | | cellValue = DateUtil.convertDateToStr(date, "yyyy-MM-dd HH:mm:ss"); |
| | | |
| | | if (doubleValue%1 == 0) { |
| | | intValue = (int)doubleValue; |
| | | cellValue = intValue + ""; |
| | | } |
| | | else { |
| | | cellValue = doubleValue + ""; |
| | | } |
| | | } else { |
| | | double doubleValue = cell.getNumericCellValue(); |
| | | int intValue; |
| | | |
| | | if (doubleValue % 1 == 0) { |
| | | intValue = (int)doubleValue; |
| | | cellValue = intValue + ""; |
| | | } |
| | | else { |
| | | cellValue = doubleValue + ""; |
| | | } |
| | | } |
| | | break; |
| | | |
| | | case Cell.CELL_TYPE_STRING : |
| | |
| | | } |
| | | } |
| | | |
| | | // 메인 url만 추출 |
| | | public static String extractUrl(String content){ |
| | | try { |
| | | String REGEX = "(http(s)?:\\/\\/)([a-z0-9\\w]+\\.*)+[a-z0-9]{2,4}"; |
| | | Pattern p = Pattern.compile(REGEX, Pattern.CASE_INSENSITIVE); |
| | | Matcher m = p.matcher(content); |
| | | if (m.find()) { |
| | | return m.group(); |
| | | } |
| | | return ""; |
| | | } catch (Exception e) { |
| | | return ""; |
| | | } |
| | | } |
| | | |
| | | // 메인 url 추출을 위해 http: 확인 |
| | | public static String getUrl(String fullUrl) { |
| | | if (fullUrl != null) { |
| | | if (fullUrl.indexOf("http") == -1) { |
| | | fullUrl = "http://" + fullUrl; |
| | | } |
| | | |
| | | return extractUrl(fullUrl); |
| | | } |
| | | return ""; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 정규식 검사(URL) |
| | | * @param url 대상 문자열(URL) |
| | | * @return 검사 결과 |
| | | */ |
| | | public static boolean verifyUrl(String url) { |
| | | return verifyRegular(url, Regular.URL); |
| | | } |
| | | |
| | | /** |
| | | * 정규식 검사(IP) |
| | | * @param ip 대상 문자열(IP) |
| | | * @return 검사 결과 |
| | | */ |
| | | public static boolean verifyIp(String ip) { |
| | | return verifyRegular(ip, Regular.IP); |
| | | } |
| | | |
| | | /** |
| | | * 정규식 검사 |
| | | * @param value 대상 문자열 |
| | | * @param regular 정규식 검사를 할 정규식 구문 |
| | | * @return 검사 결과 |
| | | */ |
| | | public static boolean verifyRegular(String value, String regular) { |
| | | if (!StringUtils.isEmpty(value)) { |
| | | return Pattern.matches(regular, value); |
| | | } |
| | | return false; |
| | | } |
| | | } |