Class AbstractFileProcessor
java.lang.Object
org.machanism.machai.project.ProjectProcessor
org.machanism.machai.gw.processor.AbstractFileProcessor
- Direct Known Subclasses:
AIFileProcessor
Base implementation for processors that traverse a project directory and
perform work on files and folders.
AbstractFileProcessor provides common functionality used by the
Ghostwriter CLI, such as:
- Collecting files under a project directory while excluding common build and tooling folders,
- Supporting optional include matching via
PathMatcherand optional exclusion patterns, and - Delegating per-file work to subclasses via
processFile(ProjectLayout, File).
This class does not perform dependency resolution or builds; it operates on the filesystem only.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected static final StringPrefix for project-layout properties exposed for template substitution.Fields inherited from class org.machanism.machai.project.ProjectProcessor
MACHAI_TEMP_DIR -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedAbstractFileProcessor(File rootDir, Configurator configurator) Creates a new file processor. -
Method Summary
Modifier and TypeMethodDescriptionReturns the configuration source for this processor.String[]Returns the exclude patterns configured for this processor.longReturns the timeout (in minutes) to wait for module processing completion during shutdown.getPath()Returns the scan directory used to derive match semantics.Returns the matcher used to decide whether a file is included.Returns the root directory used as a base for relative paths.static booleanisModuleDir(ProjectLayout projectLayout, File dir) Checks whetherdiris one of the project module directories.booleanReturns whether recursion into modules/subdirectories is disabled.protected booleanDetermines whether the specified file should be included for processing based on exclusion rules, path matching patterns, and project structure.protected voidprocessFile(ProjectLayout projectLayout, File file) Extracts guidance for a file and, when present, performs provider processing.voidprocessFolder(ProjectLayout projectLayout) Processes a project layout for documentation gathering.protected voidprocessParentFiles(ProjectLayout projectLayout) Processes non-module files and directories directly underrootDir.voidprocessProjectDir(ProjectLayout layout, String filePattern) Processes files in a project directory matching a provided pattern or directory.voidscanFolder(File projectDir) Recursively scans project folders, processing documentation inputs for all found modules and files.voidsetDegreeOfConcurrency(int data) Sets the degree of concurrency for multi-threaded module processing.voidsetExcludes(String[] excludes) Sets exclude patterns or paths.voidsetModuleThreadTimeoutMinutes(long moduleThreadTimeoutMinutes) Sets the module processing shutdown timeout.voidsetNonRecursive(boolean nonRecursive) Sets whether scanning is restricted to the current directory only.voidSets the scan directory that originated the current match operation.voidsetPathMatcher(PathMatcher pathMatcher) Sets the path matcher used to include only matching files.booleanshouldExcludePath(Path path) Determines whether a relative path should be excluded according toexcludes.Methods inherited from class org.machanism.machai.project.ProjectProcessor
getProjectLayout, processModule
-
Field Details
-
GW_PROJECT_LAYOUT_PROP_PREFIX
Prefix for project-layout properties exposed for template substitution.- See Also:
-
-
Constructor Details
-
AbstractFileProcessor
Creates a new file processor.- Parameters:
rootDir- root directory used as a base for relative pathconfigurator- configuration source used by implementations
-
-
Method Details
-
scanFolder
Recursively scans project folders, processing documentation inputs for all found modules and files.- Overrides:
scanFolderin classProjectProcessor- Parameters:
projectDir- the directory containing the project/module to be scanned- Throws:
IOException- if an error occurs reading files
-
isModuleDir
Checks whetherdiris one of the project module directories.- Parameters:
projectLayout- layout containing module definitionsdir- directory candidate- Returns:
trueifdiris a module directory, otherwisefalse
-
match
Determines whether the specified file should be included for processing based on exclusion rules, path matching patterns, and project structure.The matching logic proceeds as follows:
- If the
fileisnull, returnsfalse. - If the file's absolute path contains any of the excluded directory names
defined in
ProjectLayout.EXCLUDE_DIRS, returnsfalse. - Computes the relative path from
rootDirtofile. If this isnull, returnsfalse. - Uses
pathMatcherto check if the relative path matches the configured pattern. - If it does not match and
pathis notnull, performs a secondary match that attempts to resolve the scan directory against the file and re-check from the project root.
- Parameters:
file- the file to check for inclusionprojectDir- the project directory of the project- Returns:
trueif the file matches all criteria for processing;falseotherwise
- If the
-
processParentFiles
Processes non-module files and directories directly underrootDir.- Parameters:
projectLayout- project layout- Throws:
IOException- if file reading fails
-
processFile
Extracts guidance for a file and, when present, performs provider processing.- Parameters:
projectLayout- project layoutfile- file to process- Throws:
IOException- if reading the file or provider execution fails
-
shouldExcludePath
Determines whether a relative path should be excluded according toexcludes.- Parameters:
path- project-relative path- Returns:
truewhen excluded
-
processFolder
Processes a project layout for documentation gathering.- Specified by:
processFolderin classProjectProcessor- Parameters:
projectLayout- layout describing sources, tests, docs, and modules
-
processProjectDir
Processes files in a project directory matching a provided pattern or directory.- Parameters:
layout- project layoutfilePattern- directory path,glob:, orregex:pattern
-
setDegreeOfConcurrency
public void setDegreeOfConcurrency(int data) Sets the degree of concurrency for multi-threaded module processing.- Parameters:
data- number of concurrent threads to use
-
setNonRecursive
public void setNonRecursive(boolean nonRecursive) Sets whether scanning is restricted to the current directory only.- Parameters:
nonRecursive-trueto disable module recursion
-
getExcludes
Returns the exclude patterns configured for this processor.- Returns:
- exclude list
-
setExcludes
Sets exclude patterns or paths.Each entry may be:
- a
glob:orregex:matcher expression - an exact relative path (compared using
Strings.CS)
- Parameters:
excludes- exclude list
- a
-
getRootDir
Returns the root directory used as a base for relative paths.- Returns:
- root directory
-
isNonRecursive
public boolean isNonRecursive()Returns whether recursion into modules/subdirectories is disabled.- Returns:
truewhen non-recursive mode is enabled
-
getModuleThreadTimeoutMinutes
public long getModuleThreadTimeoutMinutes()Returns the timeout (in minutes) to wait for module processing completion during shutdown.- Returns:
- shutdown timeout in minutes
-
setModuleThreadTimeoutMinutes
public void setModuleThreadTimeoutMinutes(long moduleThreadTimeoutMinutes) Sets the module processing shutdown timeout.- Parameters:
moduleThreadTimeoutMinutes- timeout in minutes; must be greater than 0- Throws:
IllegalArgumentException- if the timeout is not positive
-
setPath
Sets the scan directory that originated the current match operation.- Parameters:
path- scan directory
-
setPathMatcher
Sets the path matcher used to include only matching files.- Parameters:
pathMatcher- matcher (may benullto disable matching)
-
getPath
Returns the scan directory used to derive match semantics.- Returns:
- scan directory or
null
-
getPathMatcher
Returns the matcher used to decide whether a file is included.- Returns:
- matcher or
nullwhen matching is disabled
-
getConfigurator
Returns the configuration source for this processor.- Returns:
- configurator
-