Search in sources :

Example 1 with SourceAnalysisDVO

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 "";
}
Also used : SourceAnalysisDVO(com.kyj.fx.voeditor.visual.words.spec.auto.msword.vo.SourceAnalysisDVO)

Example 2 with SourceAnalysisDVO

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();
    }
}
Also used : Matcher(java.util.regex.Matcher) BlockDVO(com.kyj.fx.voeditor.visual.words.spec.auto.msword.vo.BlockDVO) SourceAnalysisDVO(com.kyj.fx.voeditor.visual.words.spec.auto.msword.vo.SourceAnalysisDVO)

Example 3 with SourceAnalysisDVO

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 "";
}
Also used : SourceAnalysisDVO(com.kyj.fx.voeditor.visual.words.spec.auto.msword.vo.SourceAnalysisDVO)

Example 4 with SourceAnalysisDVO

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;
}
Also used : ImportsDVO(com.kyj.fx.voeditor.visual.words.spec.auto.msword.vo.ImportsDVO) UserSourceMetaDVO(com.kyj.fx.voeditor.visual.words.spec.auto.msword.vo.UserSourceMetaDVO) ArrayList(java.util.ArrayList) ProgramSpecSVO(com.kyj.fx.voeditor.visual.words.spec.auto.msword.vo.ProgramSpecSVO) ProgramSpecSourceException(com.kyj.fx.voeditor.visual.exceptions.ProgramSpecSourceException) MethodDVO(com.kyj.fx.voeditor.visual.words.spec.auto.msword.vo.MethodDVO) SourceAnalysisDVO(com.kyj.fx.voeditor.visual.words.spec.auto.msword.vo.SourceAnalysisDVO)

Example 5 with SourceAnalysisDVO

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;
}
Also used : ImportsDVO(com.kyj.fx.voeditor.visual.words.spec.auto.msword.vo.ImportsDVO) UserSourceMetaDVO(com.kyj.fx.voeditor.visual.words.spec.auto.msword.vo.UserSourceMetaDVO) ArrayList(java.util.ArrayList) ProgramSpecSVO(com.kyj.fx.voeditor.visual.words.spec.auto.msword.vo.ProgramSpecSVO) ProgramSpecSourceException(com.kyj.fx.voeditor.visual.exceptions.ProgramSpecSourceException) MethodDVO(com.kyj.fx.voeditor.visual.words.spec.auto.msword.vo.MethodDVO) SourceAnalysisDVO(com.kyj.fx.voeditor.visual.words.spec.auto.msword.vo.SourceAnalysisDVO)

Aggregations

SourceAnalysisDVO (com.kyj.fx.voeditor.visual.words.spec.auto.msword.vo.SourceAnalysisDVO)8 ProgramSpecSourceException (com.kyj.fx.voeditor.visual.exceptions.ProgramSpecSourceException)2 BlockDVO (com.kyj.fx.voeditor.visual.words.spec.auto.msword.vo.BlockDVO)2 ImportsDVO (com.kyj.fx.voeditor.visual.words.spec.auto.msword.vo.ImportsDVO)2 MethodDVO (com.kyj.fx.voeditor.visual.words.spec.auto.msword.vo.MethodDVO)2 ProgramSpecSVO (com.kyj.fx.voeditor.visual.words.spec.auto.msword.vo.ProgramSpecSVO)2 UserSourceMetaDVO (com.kyj.fx.voeditor.visual.words.spec.auto.msword.vo.UserSourceMetaDVO)2 ArrayList (java.util.ArrayList)2 Matcher (java.util.regex.Matcher)2 ProgramSpecSourceErrException (com.kyj.fx.voeditor.visual.exceptions.ProgramSpecSourceErrException)1 FxPostInitialize (com.kyj.fx.voeditor.visual.framework.annotation.FxPostInitialize)1 SourceCodeAnalysis (com.kyj.fx.voeditor.visual.words.spec.auto.msword.biz.SourceCodeAnalysis)1 BizFile (com.kyj.fx.voeditor.visual.words.spec.auto.msword.model.BizFile)1 IntStream (java.util.stream.IntStream)1 FXML (javafx.fxml.FXML)1 Label (javafx.scene.control.Label)1 HBox (javafx.scene.layout.HBox)1