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 cfb7188..1cfabcf 100644 --- a/src/main/java/ru/ulstu/extractor/heuristic/api/StructuralUnitIdentifier.java +++ b/src/main/java/ru/ulstu/extractor/heuristic/api/StructuralUnitIdentifier.java @@ -9,6 +9,7 @@ import ru.ulstu.extractor.heuristic.component.BuildTool; import ru.ulstu.extractor.heuristic.component.ProgrammingLanguage; import ru.ulstu.extractor.heuristic.model.BusinessLogicUnit; import ru.ulstu.extractor.heuristic.model.EntityUnit; +import ru.ulstu.extractor.heuristic.model.ResourceUnit; import ru.ulstu.extractor.heuristic.service.DetectorService; import ru.ulstu.extractor.heuristic.service.ProgrammingLanguageService; import ru.ulstu.extractor.util.StringUtils; @@ -35,6 +36,11 @@ public abstract class StructuralUnitIdentifier { return getBusinessLogicClasses(projectPath, subDirectory, projectFiles); } + public List getResourceClasses(String projectPath, List projectFiles, List rootProjectFiles) { + String subDirectory = getSourceDirectory(rootProjectFiles); + return getResourceClasses(projectPath, subDirectory, projectFiles); + } + public abstract boolean canAppliedToCode(String sourceCode); public abstract boolean canAppliedToFile(File projectFile); @@ -100,4 +106,10 @@ public abstract class StructuralUnitIdentifier { fileContent, scrupulousness)); } + + protected abstract List getResourceClasses(String projectPath, String subDirectory, List projectFiles); + + public abstract boolean isResourceClass(String sourceCode); + + protected abstract boolean isResourceClass(File file); } diff --git a/src/main/java/ru/ulstu/extractor/heuristic/controller/StructuralUnitController.java b/src/main/java/ru/ulstu/extractor/heuristic/controller/StructuralUnitController.java index 7024d56..ff584ae 100644 --- a/src/main/java/ru/ulstu/extractor/heuristic/controller/StructuralUnitController.java +++ b/src/main/java/ru/ulstu/extractor/heuristic/controller/StructuralUnitController.java @@ -10,6 +10,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import ru.ulstu.extractor.heuristic.model.BusinessLogicUnit; import ru.ulstu.extractor.heuristic.model.EntityUnit; +import ru.ulstu.extractor.heuristic.model.ResourceUnit; import ru.ulstu.extractor.heuristic.service.StructuralUnitService; import ru.ulstu.extractor.service.GitRepositoryService; @@ -40,4 +41,10 @@ public class StructuralUnitController { File rootPath = gitRepositoryService.getProjectDirectoryFile(repositoryUrl); return structuralUnitService.getBusinessLogic(rootPath); } + + @GetMapping("get-resources") + public List getResource(String repositoryUrl) throws IOException { + File rootPath = gitRepositoryService.getProjectDirectoryFile(repositoryUrl); + return structuralUnitService.getResource(rootPath); + } } diff --git a/src/main/java/ru/ulstu/extractor/heuristic/model/ResourceUnit.java b/src/main/java/ru/ulstu/extractor/heuristic/model/ResourceUnit.java new file mode 100644 index 0000000..cf0e517 --- /dev/null +++ b/src/main/java/ru/ulstu/extractor/heuristic/model/ResourceUnit.java @@ -0,0 +1,15 @@ +/* + * 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; + +import java.io.File; + +public class ResourceUnit extends StructuralUnit { + + public ResourceUnit(String projectPath, File file) { + super(projectPath, file); + } +} 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 afa92ff..5ed971d 100644 --- a/src/main/java/ru/ulstu/extractor/heuristic/service/JavaIdentifier.java +++ b/src/main/java/ru/ulstu/extractor/heuristic/service/JavaIdentifier.java @@ -18,6 +18,7 @@ import ru.ulstu.extractor.heuristic.component.JavaProgrammingLanguage; import ru.ulstu.extractor.heuristic.component.ProgrammingLanguage; import ru.ulstu.extractor.heuristic.model.BusinessLogicUnit; import ru.ulstu.extractor.heuristic.model.EntityUnit; +import ru.ulstu.extractor.heuristic.model.ResourceUnit; import ru.ulstu.extractor.util.StringUtils; import java.io.File; @@ -109,6 +110,20 @@ public class JavaIdentifier extends StructuralUnitIdentifier { return new JavaProgrammingLanguage(); } + @Override + protected List getResourceClasses(String projectPath, String subDirectory, List projectFiles) { + return projectFiles.stream() + .filter(file -> StringUtils.fileInSubdirectory(file.getPath(), projectPath, subDirectory)) + .filter(this::isResourceClass) + .map(file -> new ResourceUnit(projectPath, file)) + .collect(Collectors.toList()); + } + + @Override + public boolean isResourceClass(String sourceCode) { + return false; + } + @Override public boolean isEntityClass(File file) { try { @@ -224,4 +239,13 @@ public class JavaIdentifier extends StructuralUnitIdentifier { } return false; } + + protected boolean isResourceClass(File file) { + try { + return file.getName().endsWith("html") || file.getName().endsWith("css"); + } catch (Exception ex) { + ex.printStackTrace(); + } + return false; + } } 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 4070c10..aa2e02e 100644 --- a/src/main/java/ru/ulstu/extractor/heuristic/service/StructuralUnitService.java +++ b/src/main/java/ru/ulstu/extractor/heuristic/service/StructuralUnitService.java @@ -9,6 +9,7 @@ import org.springframework.stereotype.Service; import ru.ulstu.extractor.heuristic.api.StructuralUnitIdentifier; import ru.ulstu.extractor.heuristic.model.BusinessLogicUnit; import ru.ulstu.extractor.heuristic.model.EntityUnit; +import ru.ulstu.extractor.heuristic.model.ResourceUnit; import java.io.File; import java.io.IOException; @@ -77,4 +78,16 @@ public class StructuralUnitService { .map(identifier -> identifier.isBusinessLogicClass(sourceCode)) .orElse(false); } + + public List getResource(File rootPath) throws IOException { + List projectFiles = directoryService.getFilesRecursively(rootPath); + List rootProjectFiles = directoryService.getDirectoryFiles(rootPath.toPath()); + return getStructuralUnitIdentifier( + structuralUnitIdentifier -> structuralUnitIdentifier.canAppliedToProject( + rootPath.getPath(), + projectFiles, + rootProjectFiles)) + .orElseThrow(() -> new RuntimeException("Identifier not found")) + .getResourceClasses(rootPath.getPath(), projectFiles, rootProjectFiles); + } }