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 cbe6680..3217e51 100644 --- a/src/main/java/ru/ulstu/extractor/heuristic/api/StructuralUnitIdentifier.java +++ b/src/main/java/ru/ulstu/extractor/heuristic/api/StructuralUnitIdentifier.java @@ -5,8 +5,8 @@ package ru.ulstu.extractor.heuristic.api; -import ru.ulstu.extractor.heuristic.model.BuildTool; -import ru.ulstu.extractor.heuristic.model.ProgrammingLanguage; +import ru.ulstu.extractor.heuristic.component.BuildTool; +import ru.ulstu.extractor.heuristic.component.ProgrammingLanguage; import ru.ulstu.extractor.heuristic.model.StructuralUnit; import ru.ulstu.extractor.heuristic.service.DetectorService; @@ -21,11 +21,11 @@ import java.util.Optional; public abstract class StructuralUnitIdentifier { public List getEntityClasses(String projectPath, List projectFiles, List rootProjectFiles) { - String subDirectory = getSourceDirectory(projectFiles, rootProjectFiles); + String subDirectory = getSourceDirectory(rootProjectFiles); return getEntityClasses(projectPath, subDirectory, projectFiles); } - protected abstract String getSourceDirectory(List projectFiles, List rootProjectFiles); + protected abstract String getSourceDirectory(List rootProjectFiles); public abstract List getEntityClasses(String projectPath, String subDirectory, List projectFiles); diff --git a/src/main/java/ru/ulstu/extractor/heuristic/component/BuildTool.java b/src/main/java/ru/ulstu/extractor/heuristic/component/BuildTool.java new file mode 100644 index 0000000..273e46e --- /dev/null +++ b/src/main/java/ru/ulstu/extractor/heuristic/component/BuildTool.java @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2021 Anton Romanov - All Rights Reserved + * You may use, distribute and modify this code, please write to: romanov73@gmail.com. + */ + +package ru.ulstu.extractor.heuristic.component; + +import java.io.File; +import java.util.List; + +public abstract class BuildTool { + private final String name; + + public BuildTool(String name) { + this.name = name; + } + + public abstract boolean canAppliedToProject(List rootProjectFiles); + + public String getName() { + return name; + } + + public abstract String getSourceDirectoryPath(); +} diff --git a/src/main/java/ru/ulstu/extractor/heuristic/component/GradleBuildTool.java b/src/main/java/ru/ulstu/extractor/heuristic/component/GradleBuildTool.java new file mode 100644 index 0000000..4d1f4d1 --- /dev/null +++ b/src/main/java/ru/ulstu/extractor/heuristic/component/GradleBuildTool.java @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2021 Anton Romanov - All Rights Reserved + * You may use, distribute and modify this code, please write to: romanov73@gmail.com. + */ + +package ru.ulstu.extractor.heuristic.component; + +import org.springframework.stereotype.Component; + +import java.io.File; +import java.util.List; + +@Component +public class GradleBuildTool extends BuildTool { + + public GradleBuildTool() { + super("Gradle"); + } + + @Override + public boolean canAppliedToProject(List rootProjectFiles) { + return rootProjectFiles.stream() + .anyMatch(file -> file.getName().equals("build.gradle") || file.getName().equals("settings.gradle")); + } + + @Override + public String getSourceDirectoryPath() { + return "src"; + } +} diff --git a/src/main/java/ru/ulstu/extractor/heuristic/component/JavaProgrammingLanguage.java b/src/main/java/ru/ulstu/extractor/heuristic/component/JavaProgrammingLanguage.java new file mode 100644 index 0000000..0a191ad --- /dev/null +++ b/src/main/java/ru/ulstu/extractor/heuristic/component/JavaProgrammingLanguage.java @@ -0,0 +1,12 @@ +/* + * Copyright (C) 2021 Anton Romanov - All Rights Reserved + * You may use, distribute and modify this code, please write to: romanov73@gmail.com. + */ + +package ru.ulstu.extractor.heuristic.component; + +public class JavaProgrammingLanguage extends ProgrammingLanguage { + public JavaProgrammingLanguage() { + super("java"); + } +} diff --git a/src/main/java/ru/ulstu/extractor/heuristic/component/MavenBuildTool.java b/src/main/java/ru/ulstu/extractor/heuristic/component/MavenBuildTool.java new file mode 100644 index 0000000..7897e1c --- /dev/null +++ b/src/main/java/ru/ulstu/extractor/heuristic/component/MavenBuildTool.java @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2021 Anton Romanov - All Rights Reserved + * You may use, distribute and modify this code, please write to: romanov73@gmail.com. + */ + +package ru.ulstu.extractor.heuristic.component; + +import org.springframework.stereotype.Component; + +import java.io.File; +import java.util.List; + +@Component +public class MavenBuildTool extends BuildTool { + + public MavenBuildTool() { + super("Maven"); + } + + @Override + public boolean canAppliedToProject(List rootProjectFiles) { + return rootProjectFiles.stream() + .anyMatch(file -> file.getName().equals("pom.xml")); + } + + @Override + public String getSourceDirectoryPath() { + return "src"; + } +} diff --git a/src/main/java/ru/ulstu/extractor/heuristic/model/ProgrammingLanguage.java b/src/main/java/ru/ulstu/extractor/heuristic/component/ProgrammingLanguage.java similarity index 51% rename from src/main/java/ru/ulstu/extractor/heuristic/model/ProgrammingLanguage.java rename to src/main/java/ru/ulstu/extractor/heuristic/component/ProgrammingLanguage.java index a872270..66c5850 100644 --- a/src/main/java/ru/ulstu/extractor/heuristic/model/ProgrammingLanguage.java +++ b/src/main/java/ru/ulstu/extractor/heuristic/component/ProgrammingLanguage.java @@ -1,4 +1,9 @@ -package ru.ulstu.extractor.heuristic.model; +/* + * Copyright (C) 2021 Anton Romanov - All Rights Reserved + * You may use, distribute and modify this code, please write to: romanov73@gmail.com. + */ + +package ru.ulstu.extractor.heuristic.component; public abstract class ProgrammingLanguage { private final String name; diff --git a/src/main/java/ru/ulstu/extractor/heuristic/model/BuildTool.java b/src/main/java/ru/ulstu/extractor/heuristic/model/BuildTool.java deleted file mode 100644 index e6e9a6f..0000000 --- a/src/main/java/ru/ulstu/extractor/heuristic/model/BuildTool.java +++ /dev/null @@ -1,16 +0,0 @@ -package ru.ulstu.extractor.heuristic.model; - -public abstract class BuildTool { - private final String name; - - public BuildTool(String name) { - this.name = name; - } - - protected abstract boolean canAppliedToProject(); - - public String getName() { - return name; - } - -} diff --git a/src/main/java/ru/ulstu/extractor/heuristic/model/GradleBuildTool.java b/src/main/java/ru/ulstu/extractor/heuristic/model/GradleBuildTool.java deleted file mode 100644 index c99c245..0000000 --- a/src/main/java/ru/ulstu/extractor/heuristic/model/GradleBuildTool.java +++ /dev/null @@ -1,13 +0,0 @@ -package ru.ulstu.extractor.heuristic.model; - -public class GradleBuildTool extends BuildTool { - - public GradleBuildTool() { - super("Gradle"); - } - - @Override - protected boolean canAppliedToProject() { - return false; - } -} diff --git a/src/main/java/ru/ulstu/extractor/heuristic/model/JavaProgrammingLanguage.java b/src/main/java/ru/ulstu/extractor/heuristic/model/JavaProgrammingLanguage.java deleted file mode 100644 index 7f04351..0000000 --- a/src/main/java/ru/ulstu/extractor/heuristic/model/JavaProgrammingLanguage.java +++ /dev/null @@ -1,7 +0,0 @@ -package ru.ulstu.extractor.heuristic.model; - -public class JavaProgrammingLanguage extends ProgrammingLanguage { - public JavaProgrammingLanguage() { - super("java"); - } -} diff --git a/src/main/java/ru/ulstu/extractor/heuristic/model/MavenBuildTool.java b/src/main/java/ru/ulstu/extractor/heuristic/model/MavenBuildTool.java deleted file mode 100644 index 2910407..0000000 --- a/src/main/java/ru/ulstu/extractor/heuristic/model/MavenBuildTool.java +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright (C) 2021 Anton Romanov - All Rights Reserved - * You may use, distribute and modify this code, please write to: romanov73@gmail.com. - */ - -package ru.ulstu.extractor.heuristic.model; - -public class MavenBuildTool extends BuildTool { - - public MavenBuildTool() { - super("Gradle"); - } - - @Override - protected boolean canAppliedToProject() { - return false; - } -} diff --git a/src/main/java/ru/ulstu/extractor/heuristic/service/BuildToolService.java b/src/main/java/ru/ulstu/extractor/heuristic/service/BuildToolService.java new file mode 100644 index 0000000..2ce46cb --- /dev/null +++ b/src/main/java/ru/ulstu/extractor/heuristic/service/BuildToolService.java @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2021 Anton Romanov - All Rights Reserved + * You may use, distribute and modify this code, please write to: romanov73@gmail.com. + */ + +package ru.ulstu.extractor.heuristic.service; + +import org.springframework.stereotype.Service; +import ru.ulstu.extractor.heuristic.component.BuildTool; + +import java.io.File; +import java.util.List; +import java.util.Optional; + +@Service +public class BuildToolService { + private final List buildTools; + + public BuildToolService(List buildTools) { + this.buildTools = buildTools; + } + + public Optional getProjectBuildTool(List rootProjectFiles) { + return buildTools.stream().filter(buildTool -> buildTool.canAppliedToProject(rootProjectFiles)).findAny(); + } +} 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 d27b65c..0575698 100644 --- a/src/main/java/ru/ulstu/extractor/heuristic/service/JavaIdentifier.java +++ b/src/main/java/ru/ulstu/extractor/heuristic/service/JavaIdentifier.java @@ -10,12 +10,12 @@ import com.github.javaparser.ParseResult; import com.github.javaparser.ast.CompilationUnit; import org.springframework.stereotype.Service; import ru.ulstu.extractor.heuristic.api.StructuralUnitIdentifier; -import ru.ulstu.extractor.heuristic.model.BuildTool; +import ru.ulstu.extractor.heuristic.component.BuildTool; +import ru.ulstu.extractor.heuristic.component.GradleBuildTool; +import ru.ulstu.extractor.heuristic.component.JavaProgrammingLanguage; +import ru.ulstu.extractor.heuristic.component.MavenBuildTool; +import ru.ulstu.extractor.heuristic.component.ProgrammingLanguage; import ru.ulstu.extractor.heuristic.model.EntityUnit; -import ru.ulstu.extractor.heuristic.model.GradleBuildTool; -import ru.ulstu.extractor.heuristic.model.JavaProgrammingLanguage; -import ru.ulstu.extractor.heuristic.model.MavenBuildTool; -import ru.ulstu.extractor.heuristic.model.ProgrammingLanguage; import ru.ulstu.extractor.heuristic.model.StructuralUnit; import ru.ulstu.extractor.util.StringUtils; @@ -28,9 +28,12 @@ import java.util.stream.Collectors; @Service public class JavaIdentifier extends StructuralUnitIdentifier { private final DetectorService detectorService; + private final BuildToolService buildToolService; - public JavaIdentifier(DetectorService detectorService) { + public JavaIdentifier(DetectorService detectorService, + BuildToolService buildToolService) { this.detectorService = detectorService; + this.buildToolService = buildToolService; } @Override @@ -104,15 +107,10 @@ public class JavaIdentifier extends StructuralUnitIdentifier { } @Override - protected String getSourceDirectory(List projectFiles, List rootDirectoryFiles) { - Optional buildTool = getBuildTool(rootDirectoryFiles); - if (buildTool.isPresent()) { - if (buildTool.get() instanceof GradleBuildTool || - buildTool.get() instanceof MavenBuildTool) { - return "src"; - } - } - return "src"; + protected String getSourceDirectory(List rootDirectoryFiles) { + return buildToolService.getProjectBuildTool(rootDirectoryFiles) + .map(BuildTool::getSourceDirectoryPath) + .orElse("src"); } @Override