38 lines
1.0 KiB
Python
38 lines
1.0 KiB
Python
from parser.ProjectParser.Project import Project
|
|
from parser.ProjectParser.ProjectLineParser import ProjectLineParser
|
|
|
|
|
|
class ProjectParser:
|
|
def __init__(self, line_collection, value_provider, command_token):
|
|
assert line_collection is not None
|
|
assert value_provider is not None
|
|
assert command_token is not None
|
|
|
|
self._line_collection = line_collection
|
|
self._value_provider = value_provider
|
|
self._command_token = command_token
|
|
self.projects_dict = {}
|
|
|
|
def parse(self):
|
|
|
|
settings = []
|
|
for line in self._line_collection:
|
|
settings.append(self.__parse_line(line))
|
|
|
|
for s in settings:
|
|
project = self.__fetchProject(s.projectName)
|
|
s.apply(project)
|
|
|
|
def __fetchProject(self, project_name):
|
|
assert project_name is not None
|
|
|
|
project = self.projects_dict.get(project_name, Project(project_name))
|
|
self.projects_dict[project_name] = project
|
|
|
|
return project
|
|
|
|
def __parse_line(self, line):
|
|
line_parser = ProjectLineParser(self._value_provider, self._command_token)
|
|
setting = line_parser.parseLine(line)
|
|
|
|
return setting |