public static void setAllowedTypes(FileUploadInfo info, SubContentInfo sinfo) throws ContentException {
log.debug("<< setAllowedTypes >> START");
Class cls = info.getClass();
Class scls = sinfo.getClass();
Method[] mtd = cls.getDeclaredMethods();
Pattern p = Pattern.compile("get_fileUpload_(\\d+)FileName");
Matcher m = null;
String mStr = null;
String mType = null;
String defExt = null;
int i;
for(i = 0; i < mtd.length; i++) {
m = p.matcher(mtd[i].getName());
if(m.find()) {
try {
// 파일명이 존재하는 경우만
mStr = FileUploadInfo.getValueOfMethod(info, m.group());
if(mStr != null) {
mType = FileUploadInfo.getValueOfMethod(info, "get_fileUpload_" + m.group(1) + "ContentType");
// 기본 확장자 지정
defExt = "";
if(mType != null) {
defExt = mStr.substring(mStr.lastIndexOf(".") + 1);
defExt = defExt.toLowerCase().trim();
log.debug("defExt = " + defExt);
if("jpg".equals(defExt) ||
"gif".equals(defExt) ||
"xml".equals(defExt) ||
"xmp".equals(defExt) ||
"png".equals(defExt) ||
"zip".equals(defExt) ) {
// 진행
}else {
// 오류 발생
throw new ContentException("지원하지 않는 파일입니다.");
}
}
Class[] cParam = new Class[]{String.class};
Method cMtd = cls.getMethod("set_fileUpload_" + m.group(1) + "FileName", cParam);
Object[] oParam = new Object[]{mStr};
// FileUploadInfo에 등록
cMtd.invoke(info, oParam); // 마찬가지로 첫번째 인자는 실행시킬 메소드를 갖고 있는 obj, 두번째는 실제 메소드의 파라미터
// SubContentInfo에 등록
// 1. FileUPloadInfo의 FieldName을 찾는다.
cMtd = cls.getMethod("get_fileUpload_" + m.group(1) + "FieldName", null);
String tmpFieldName = (String)cMtd.invoke(info, null);
// 2. SubContentInfo의 의 1번의 Method에 등록한다.
cMtd = scls.getMethod("set" + tmpFieldName.substring(0, 1).toUpperCase() + tmpFieldName.substring(1) , cParam);
cMtd.invoke(sinfo, oParam);
}
}
catch (ContentException e) {
log.debug("지원하지 않는 파일 예외 발생", e);
throw e;
}
catch (Exception e) {
e.printStackTrace();
}
}
}
}
public static String getValueOfMethod(Object obj, String methodName) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
String str = "";
Class cls = obj.getClass(); // obj의 클래스 종류를 얻고
Method mtd = cls.getMethod(methodName, null); // 위에서 얻은 클래스의 어떤 메소드를 얻는데, 메소드명을 인자로 받음
str = (String)mtd.invoke(obj, null); // 위에서 얻은 메소드를 실행하는데, 그 메소드를 갖고 있는 obj를 인자로 받음?
return str;
}