단속연계파일 레이아웃 판단 기능 추가
parent
a9219d0779
commit
83059987ac
@ -1,14 +1,136 @@
|
|||||||
package cokr.xit.fims.crdn.parsing;
|
package cokr.xit.fims.crdn.parsing;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.function.BiFunction;
|
||||||
|
|
||||||
|
import org.apache.commons.io.FilenameUtils;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
public class LayoutDiscriminator {
|
public class LayoutDiscriminator {
|
||||||
|
|
||||||
public static LayoutDescriptor choice(MultipartFile[] fileList, List<LayoutDescriptor> candidates) {
|
public static LayoutDescriptor choice(MultipartFile[] fileList, List<LayoutDescriptor> candidates) {
|
||||||
// TODO
|
|
||||||
return null;
|
BiFunction<String, String, Integer> filter = (validType, thisValue) -> {
|
||||||
|
for(Iterator<LayoutDescriptor> it = candidates.iterator(); it.hasNext();){
|
||||||
|
LayoutDescriptor descriptor = it.next();
|
||||||
|
|
||||||
|
switch (validType) {
|
||||||
|
case "fileGroupIsThis": {
|
||||||
|
if(!descriptor.getFileGroup().equals(thisValue)){
|
||||||
|
it.remove();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "notUseThisFileNameSeperator": {
|
||||||
|
if(descriptor.getFileNameSeperator().equals(thisValue)){
|
||||||
|
it.remove();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "fileNameLengthIsThis": {
|
||||||
|
if(descriptor.getFileNameLength() != null) {
|
||||||
|
if(!descriptor.getFileNameLength().equals(thisValue)){
|
||||||
|
it.remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "fileNameLengthIsNotFixed": {
|
||||||
|
if(descriptor.getFileNameLength() != null){
|
||||||
|
it.remove();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return candidates.size();
|
||||||
|
};
|
||||||
|
|
||||||
|
boolean hasTxt = false; //txt파일 포함 여부
|
||||||
|
boolean hasJpg = false; //jpg파일 포함 여부
|
||||||
|
boolean hasUnderbar = false; //파일명에 언더바 포함 여부
|
||||||
|
boolean hasComma = false; //파일명에 콤마 포함 여부
|
||||||
|
boolean sameAllFileNameLength = true; //모든 파일명 길이 동일 여부
|
||||||
|
|
||||||
|
int fileNameLengthTemp = 0;
|
||||||
|
for(int i=0;i < fileList.length; i++) {
|
||||||
|
|
||||||
|
String fileName = fileList[i].getOriginalFilename();
|
||||||
|
String extension = FilenameUtils.getExtension(fileName);
|
||||||
|
String noExtensionName= FilenameUtils.removeExtension(fileName);
|
||||||
|
|
||||||
|
if(fileNameLengthTemp == 0) {
|
||||||
|
fileNameLengthTemp = fileName.length();
|
||||||
|
}
|
||||||
|
|
||||||
|
int fileNameLength = fileName.length();
|
||||||
|
if(fileNameLength != fileNameLengthTemp) {
|
||||||
|
sameAllFileNameLength = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(extension.toUpperCase().equals("TXT")) {
|
||||||
|
hasTxt = true;
|
||||||
|
}
|
||||||
|
if(extension.toUpperCase().equals("JPG")) {
|
||||||
|
hasJpg = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(noExtensionName.contains("_")) {
|
||||||
|
hasUnderbar = true;
|
||||||
|
}
|
||||||
|
if(noExtensionName.contains(",")) {
|
||||||
|
hasComma = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
String fileGroup = "";
|
||||||
|
if(hasTxt) {
|
||||||
|
fileGroup = "TXT";
|
||||||
|
} else if(hasJpg) {
|
||||||
|
fileGroup = "JPG";
|
||||||
|
} else {
|
||||||
|
fileGroup = "BIN";
|
||||||
|
}
|
||||||
|
|
||||||
|
if(filter.apply("fileGroupIsThis", fileGroup) == 1) {
|
||||||
|
return candidates.get(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!hasUnderbar) {
|
||||||
|
if(filter.apply("notUseThisSeperator", "_") == 1) {
|
||||||
|
return candidates.get(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!hasComma) {
|
||||||
|
if(filter.apply("notUseThisFileNameSeperator", ",") == 1) {
|
||||||
|
return candidates.get(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(sameAllFileNameLength) {
|
||||||
|
MultipartFile sample = fileList[0];
|
||||||
|
int nameLength = sample.getOriginalFilename().length();
|
||||||
|
if(filter.apply("fileNameLengthIsThis", Integer.toString(nameLength)) == 1) {
|
||||||
|
return candidates.get(0);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if(filter.apply("fileNameLengthIsNotFixed", "") == 1) {
|
||||||
|
return candidates.get(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if(candidates.size() != 1) {
|
||||||
|
throw new RuntimeException("파일의 레이아웃 서식을 구분할 수 없습니다.");
|
||||||
|
}
|
||||||
|
|
||||||
|
return candidates.get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue