diff --git a/src/main/java/ru/ulstu/extractor/heuristic/api/StructuralUnitIdentifier.java b/src/main/java/ru/ulstu/extractor/heuristic/api/StructuralUnitIdentifier.java index 9ea3355..cfb7188 100644 --- a/src/main/java/ru/ulstu/extractor/heuristic/api/StructuralUnitIdentifier.java +++ b/src/main/java/ru/ulstu/extractor/heuristic/api/StructuralUnitIdentifier.java @@ -45,6 +45,8 @@ public abstract class StructuralUnitIdentifier { public abstract boolean isEntityClass(String sourceCode); + public abstract boolean isBusinessLogicClass(String sourceCode); + protected abstract boolean isBusinessLogicClass(File file); public abstract List getBusinessLogicClasses(String projectPath, String subDirectory, List projectFiles); diff --git a/src/main/java/ru/ulstu/extractor/heuristic/service/JavaIdentifier.java b/src/main/java/ru/ulstu/extractor/heuristic/service/JavaIdentifier.java index ef2a70a..c446fd1 100644 --- a/src/main/java/ru/ulstu/extractor/heuristic/service/JavaIdentifier.java +++ b/src/main/java/ru/ulstu/extractor/heuristic/service/JavaIdentifier.java @@ -126,6 +126,16 @@ public class JavaIdentifier extends StructuralUnitIdentifier { return false; } + @Override + public boolean isBusinessLogicClass(String sourceCode) { + try { + return classContainsAnnotation(sourceCode, SERVICE_ANNOTATION); + } catch (Exception ex) { + ex.printStackTrace(); + } + return false; + } + private boolean classContainsAnnotation(File file, String annotationDeclaration) throws IOException { return classContainsAnnotation(new String(Files.readAllBytes(file.toPath())), annotationDeclaration); } diff --git a/src/main/java/ru/ulstu/extractor/heuristic/service/StructuralUnitService.java b/src/main/java/ru/ulstu/extractor/heuristic/service/StructuralUnitService.java index 83dc150..4070c10 100644 --- a/src/main/java/ru/ulstu/extractor/heuristic/service/StructuralUnitService.java +++ b/src/main/java/ru/ulstu/extractor/heuristic/service/StructuralUnitService.java @@ -70,4 +70,11 @@ public class StructuralUnitService { .filter(predicate) .findAny(); } + + public boolean containsBusinessLogic(String sourceCode) { + return getStructuralUnitIdentifier( + structuralUnitIdentifier -> structuralUnitIdentifier.canAppliedToCode(sourceCode)) + .map(identifier -> identifier.isBusinessLogicClass(sourceCode)) + .orElse(false); + } } diff --git a/src/main/java/ru/ulstu/extractor/model/FileChange.java b/src/main/java/ru/ulstu/extractor/model/FileChange.java index 2a34ff3..80d1b8f 100644 --- a/src/main/java/ru/ulstu/extractor/model/FileChange.java +++ b/src/main/java/ru/ulstu/extractor/model/FileChange.java @@ -27,6 +27,8 @@ public class FileChange extends BaseEntity { private Boolean containsEntity; + private Boolean containsBusinessLogic; + @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY) @JoinColumn(name = "file_change_id", unique = true) @Fetch(FetchMode.SUBSELECT) @@ -86,4 +88,20 @@ public class FileChange extends BaseEntity { public void setContainsEntity(boolean containsEntity) { this.containsEntity = containsEntity; } + + public Boolean getContainsEntity() { + return containsEntity; + } + + public void setContainsEntity(Boolean containsEntity) { + this.containsEntity = containsEntity; + } + + public Boolean getContainsBusinessLogic() { + return containsBusinessLogic; + } + + public void setContainsBusinessLogic(Boolean containsBusinessLogic) { + this.containsBusinessLogic = containsBusinessLogic; + } } diff --git a/src/main/java/ru/ulstu/extractor/service/GitRepositoryService.java b/src/main/java/ru/ulstu/extractor/service/GitRepositoryService.java index 0cc4f15..de16237 100644 --- a/src/main/java/ru/ulstu/extractor/service/GitRepositoryService.java +++ b/src/main/java/ru/ulstu/extractor/service/GitRepositoryService.java @@ -206,6 +206,9 @@ public class GitRepositoryService { fileChange.setContainsEntity( structuralUnitService.containsEntity(getContent(repository, commit, maybeFileName.get())) ); + fileChange.setContainsBusinessLogic( + structuralUnitService.containsBusinessLogic(getContent(repository, commit, maybeFileName.get())) + ); /// вытащить другие изменения из коммита changes.add(fileChange); } diff --git a/src/main/resources/db/changelog-20210412_100000-schema.xml b/src/main/resources/db/changelog-20210412_100000-schema.xml index 38ffdc7..83f9844 100644 --- a/src/main/resources/db/changelog-20210412_100000-schema.xml +++ b/src/main/resources/db/changelog-20210412_100000-schema.xml @@ -12,4 +12,9 @@ + + + + + \ No newline at end of file