use of com.kyj.fx.voeditor.visual.words.spec.auto.msword.vo.SourceAnalysisDVO in project Gargoyle by callakrsos.
the class AbstractXframeProgramSpecFile method getMethodDescription.
/**
* 메소드의 주석을 찾은 다음 반환
*
* @param methodName
* 접근지정자, 반환값, 메소드명.. exception등이 포함된 메소드명
* @return
*/
public String getMethodDescription(String methodName) {
SourceAnalysisDVO d = null;
// 파라미터로 들어온 메소드를 찾는다.
for (SourceAnalysisDVO dvo : this.listStatement()) {
if (methodName.equals(dvo.getMethodName())) {
d = dvo;
break;
}
}
// 못찾으면 리턴
if (d == null) {
return "";
}
/*
* 메소드의 시작 라인지점. [주의] 메소드의 시작지점은 상황에 따라서 메소드의 라인이 반환될수있다. 아래에 if문으로
* 메소드라인이면 continue문이 존재하는데 그 지점은 skip하여 진행한다.
*/
int startLine = d.getMethodBlockStart() - 2;
List<String> codeList = meta.getSourceCodeList();
boolean stopFor = false;
int findCommentStartLine = 0;
int findCommentEndLine = 0;
// 주석문장을 찾기위한 루프문
for (int index = startLine; index >= 0; index--) {
String code = codeList.get(index).trim();
boolean commentFlag = false;
/* 메소드문에 해당하는 라인이면 SKIP한다. */
if (code.equals(methodName))
continue;
switch(CodeCommentFactory.getCommentContain(code)) {
/* 주석끝부분만 존재 */
case 0x001:
findCommentEndLine = index;
commentFlag = false;
break;
/* 주석시작부만존재 */
case 0x010:
/* 코멘트 시작부 시작 */
findCommentStartLine = index;
commentFlag = true;
break;
/* 주석이 시작끝이 다 포함됨 */
case 0x011:
findCommentStartLine = index;
findCommentEndLine = index;
commentFlag = true;
break;
/* 빈값 */
case 0x100:
break;
/* 일반텍스트 */
default:
/* 주석이 아니면서 */
if (!commentFlag) {
/* 어노테이션이면 skip */
if (code.startsWith("@")) {
} else /* 주석에 속하는 부분이면 skip */
if (code.startsWith("*")) {
} else /* 만약 일반 텍스트를 만난다면 루프문종료 */
{
stopFor = true;
}
}
break;
}
// 주석부분의 시작점을 찾았다면 그 문장을 반환한다.
if (commentFlag) {
StringBuffer sb = new StringBuffer();
for (int i = findCommentStartLine; i <= findCommentEndLine; i++) {
sb.append(codeList.get(i)).append("\n");
}
return sb.toString();
}
/*
* 만약 주석부분을 못찾게된 경우 루프를 멈춘다. 주석부분을 못찾는 기준은 주석문장이 아닌 소스코드에 해당하는
* 위치인경우임.
*/
if (stopFor) {
break;
}
}
return "";
}
use of com.kyj.fx.voeditor.visual.words.spec.auto.msword.vo.SourceAnalysisDVO in project Gargoyle by callakrsos.
the class JavaSourceAnalysis method compile.
/**
* 2014. 6. 21. Administrator
*
* @param p
* @param data
* @return
* @처리내용 : 패턴과 일치하는 내용을 찾아 반환
*/
public void compile(Pattern p) {
String statement = this.inspectorSourceMeta.getSourceCode();
Matcher m = p.matcher(statement);
boolean result = m.find();
int lineNumberSavePoint = 0;
int lineNumberCnt = 0;
// 패키지 찾기.
List<String> packageStrings = ValueUtil.regexMatchs(PACKAGE_REGEX, statement);
if (isDefaultPackage && ValueUtil.isNotEmpty(packageStrings)) {
// TODO 수정예상됨. 인덱스를 0으로 강제로 셋팅함. 허나 패키지NAME은 한개이긴함.
this.packageString = packageStrings.get(0);
isDefaultPackage = false;
}
while (result) {
String group = m.group();
/*
* 특정 로직부분에 걸리는 부분때문에 추가. ex) return query(sql.toString() , data ,
* new RowMapper() { public Object mapRow(ResultSet resultSet, int
* row)
*/
if (ValueUtil.leftTrim(group).startsWith(",")) {
result = m.find();
continue;
}
// int catchIndexOf = group.indexOf(PREVENT_CATCH);
boolean catchIndexOf = group.matches(PREVENT_CATCH);
// int newIndexOf = group.indexOf(PREVENT_NEW);
boolean newIndexOf = group.matches(PREVENT_NEW);
// int ifIndexOf = group.indexOf(PREVENT_IF);
boolean ifIndexOf = group.matches(PREVENT_IF);
// int whileIndexOf = group.indexOf(PREVENT_WHILE);
boolean whileIndexOf = group.matches(PREVENT_WHILE);
// int returnIndexOf = group.indexOf(PREVENT_RETURN);
boolean returnIndexOf = group.matches(PREVENT_RETURN);
/*
* if (catchIndexOf == -1 && newIndexOf == -1 && ifIndexOf == -1 &&
* whileIndexOf == -1 && returnIndexOf == -1)
*/
if (!catchIndexOf && !newIndexOf && !ifIndexOf && !whileIndexOf && !returnIndexOf) {
int start = m.start();
int end = m.end();
String methodName = statement.substring(lineNumberSavePoint, end);
lineNumberCnt += getLineNumberCnt(methodName);
lineNumberSavePoint = end + 1;
BlockDVO blockAndDeleteList = getBlockAndDeleteList(lineNumberCnt);
/* if문이 true인 경우는 함수가 포함된 라인안에 브레이스가 있는경우임 */
if (blockAndDeleteList == null) {
blockAndDeleteList = getBlock(lineNumberCnt, 0);
lineNumberSavePoint = lineNumberSavePoint - 1;
}
LOGGER.debug(String.format(" lineNumberCnt : %d linNuberSavePoint : %d ", lineNumberCnt, lineNumberSavePoint));
int startLine = blockAndDeleteList.getStartindex();
int endLine = blockAndDeleteList.getEndindex();
LOGGER.debug(String.format("startLine : %d endLine %d \n", startLine, endLine));
List<String> subList = this.inspectorSourceMeta.getSourceCodeList().subList(startLine - 1, endLine);
String sourceCode = getString(subList);
methodList.add(new SourceAnalysisDVO(group.replaceAll("\\{", "").trim(), start, end, startLine, endLine, this.inspectorSourceMeta.getFileName(), sourceCode));
}
result = m.find();
}
}
use of com.kyj.fx.voeditor.visual.words.spec.auto.msword.vo.SourceAnalysisDVO in project Gargoyle by callakrsos.
the class AbstractJavaProgramSpecFile method getMethodDescription.
/**
* 메소드의 주석을 찾은 다음 반환
*
* @param methodName
* 접근지정자, 반환값, 메소드명.. exception등이 포함된 메소드명
* @return
*/
public String getMethodDescription(String methodName) {
SourceAnalysisDVO d = null;
// 파라미터로 들어온 메소드를 찾는다.
for (SourceAnalysisDVO dvo : this.listStatement()) {
if (methodName.equals(dvo.getMethodName())) {
d = dvo;
break;
}
}
// 못찾으면 리턴
if (d == null) {
return "";
}
/*
* 메소드의 시작 라인지점. [주의] 메소드의 시작지점은 상황에 따라서 메소드의 라인이 반환될수있다. 아래에 if문으로
* 메소드라인이면 continue문이 존재하는데 그 지점은 skip하여 진행한다.
*/
int startLine = d.getMethodBlockStart() - 2;
List<String> codeList = meta.getSourceCodeList();
boolean stopFor = false;
int findCommentStartLine = 0;
int findCommentEndLine = 0;
// 주석문장을 찾기위한 루프문
for (int index = startLine; index >= 0; index--) {
String code = codeList.get(index).trim();
boolean commentFlag = false;
/* 메소드문에 해당하는 라인이면 SKIP한다. */
if (code.equals(methodName))
continue;
switch(CodeCommentFactory.getCommentContain(code)) {
/* 주석끝부분만 존재 */
case 0x001:
findCommentEndLine = index;
commentFlag = false;
break;
/* 주석시작부만존재 */
case 0x010:
/* 코멘트 시작부 시작 */
findCommentStartLine = index;
commentFlag = true;
break;
/* 주석이 시작끝이 다 포함됨 */
case 0x011:
findCommentStartLine = index;
findCommentEndLine = index;
commentFlag = true;
break;
/* 빈값 */
case 0x100:
break;
/* 일반텍스트 */
default:
/* 주석이 아니면서 */
if (!commentFlag) {
/* 어노테이션이면 skip */
if (code.startsWith("@")) {
} else /* 주석에 속하는 부분이면 skip */
if (code.startsWith("*")) {
} else /* 만약 일반 텍스트를 만난다면 루프문종료 */
{
stopFor = true;
}
}
break;
}
// 주석부분의 시작점을 찾았다면 그 문장을 반환한다.
if (commentFlag) {
StringBuffer sb = new StringBuffer();
for (int i = findCommentStartLine; i <= findCommentEndLine; i++) {
sb.append(codeList.get(i)).append("\n");
}
return sb.toString();
}
/*
* 만약 주석부분을 못찾게된 경우 루프를 멈춘다. 주석부분을 못찾는 기준은 주석문장이 아닌 소스코드에 해당하는
* 위치인경우임.
*/
if (stopFor) {
break;
}
}
return "";
}
use of com.kyj.fx.voeditor.visual.words.spec.auto.msword.vo.SourceAnalysisDVO in project Gargoyle by callakrsos.
the class ProgramSpecUtil method doJavaFile.
public static ProgramSpecSVO doJavaFile(String projectName, String fileName, AbstractJavaProgramSpecFile newInstance) {
ProgramSpecSVO svo = new ProgramSpecSVO();
String packageNames = newInstance.getPackage();
newInstance.setPackage(packageNames);
newInstance.setProjectName(projectName);
svo.setFile(newInstance);
// svo.getUserSourceMetaDVO().setProjectName(projectName);
// svo.getUserSourceMetaDVO().setPackages(packageNames);
String userName = System.getProperty("user.name");
List<SourceAnalysisDVO> listStatement = newInstance.listStatement();
UserSourceMetaDVO userSourceMetaDVO = new UserSourceMetaDVO();
userSourceMetaDVO.setProjectName(projectName);
userSourceMetaDVO.setSimpleFileName(fileName);
userSourceMetaDVO.setRealFilePath(newInstance.getFullFileName());
userSourceMetaDVO.setUserPcName(userName);
userSourceMetaDVO.setPackages(packageNames);
svo.setUserSourceMetaDVO(userSourceMetaDVO);
/* 시작 import문 처리 */
List<String> imports = newInstance.getImports();
ImportsDVO importsDVO = new ImportsDVO();
importsDVO.setImports(imports);
svo.setImportsDVO(importsDVO);
/* 끝 import문 처리 */
// 테이블 데이터 바인드
List<MethodDVO> methodDVOList = new ArrayList<MethodDVO>();
for (SourceAnalysisDVO dvo : listStatement) {
try {
// 소스내에 존재하는 메소드명.. 접근지 정자 + static + void 등의 잡다한 정보가 담겨있다.
String methodName = dvo.getMethodName();
String methodDescription = newInstance.getMethodDescription(methodName);
MethodDVO methodDVO = null;
methodDVO = AbstractJavaProgramSpecFile.toMethodDVO(methodName);
methodDVO.setDescription(methodDescription);
methodDVOList.add(methodDVO);
} catch (ProgramSpecSourceException e) {
e.printStackTrace();
}
}
svo.setMethodDVOList(methodDVOList);
return svo;
}
use of com.kyj.fx.voeditor.visual.words.spec.auto.msword.vo.SourceAnalysisDVO in project Gargoyle by callakrsos.
the class ProgramSpecUtil method doJsFile.
public static ProgramSpecSVO doJsFile(String projectName, String fileName, AbstractXframeProgramSpecFile newInstance) {
ProgramSpecSVO svo = new ProgramSpecSVO();
newInstance.setProjectName(projectName);
svo.setFile(newInstance);
String userName = System.getProperty("user.name");
List<SourceAnalysisDVO> listStatement = newInstance.listStatement();
UserSourceMetaDVO userSourceMetaDVO = new UserSourceMetaDVO();
userSourceMetaDVO.setProjectName(projectName);
userSourceMetaDVO.setSimpleFileName(fileName);
userSourceMetaDVO.setRealFilePath(newInstance.getFullFileName());
userSourceMetaDVO.setUserPcName(userName);
userSourceMetaDVO.setPackages("");
svo.setUserSourceMetaDVO(userSourceMetaDVO);
/* 시작 import문 처리 */
svo.setImportsDVO(new ImportsDVO());
/* 끝 import문 처리 */
// 테이블 데이터 바인드
List<MethodDVO> methodDVOList = new ArrayList<MethodDVO>();
for (SourceAnalysisDVO dvo : listStatement) {
try {
// 소스내에 존재하는 메소드명.. 접근지 정자 + static + void 등의 잡다한 정보가 담겨있다.
String methodName = dvo.getMethodName();
String methodDescription = newInstance.getMethodDescription(methodName);
MethodDVO methodDVO = null;
methodDVO = AbstractXframeProgramSpecFile.toMethodDVO(methodName);
methodDVO.setDescription(methodDescription);
methodDVOList.add(methodDVO);
} catch (ProgramSpecSourceException e) {
e.printStackTrace();
}
}
svo.setMethodDVOList(methodDVOList);
return svo;
}
Aggregations