1
2
3
4
5
6
7 package com.varmateo.yawg.core;
8
9 import java.nio.file.Path;
10 import java.util.UUID;
11 import java.util.function.Function;
12
13 import com.varmateo.yawg.spi.PageContext;
14 import com.varmateo.yawg.spi.PageContextBuilder;
15 import com.varmateo.yawg.spi.PageVars;
16 import com.varmateo.yawg.spi.PageVarsBuilder;
17 import com.varmateo.yawg.spi.TemplateService;
18
19
20
21
22
23 final class DirBakerContext {
24
25
26 private final Path _sourceRootDir;
27 private final Path _targetRootDir;
28 private final DirPageContextBuilder _dirPageContextBuilder;
29 private final DirBakeOptions _dirBakeOptions;
30 private final PageContext _pageContext;
31 private final PageVars _extensionVars;
32
33
34 private DirBakerContext(
35 final Path sourceRootDir,
36 final Path targetRootDir,
37 final DirPageContextBuilder dirPageContextBuilder,
38 final DirBakeOptions dirBakeOptions,
39 final PageContext pageContext,
40 final PageVars extensionVars) {
41
42 _sourceRootDir = sourceRootDir;
43 _targetRootDir = targetRootDir;
44 _dirPageContextBuilder = dirPageContextBuilder;
45 _dirBakeOptions = dirBakeOptions;
46 _pageContext = pageContext;
47 _extensionVars = extensionVars;
48 }
49
50
51
52
53
54 public static DirBakerContext create(
55 final Path sourceRootDir,
56 final Path targetRootDir,
57 final TemplateService templateService,
58 final DirBakeOptions dirBakeOptions) {
59
60 final String bakeId = UUID.randomUUID().toString();
61 final DirPageContextBuilderontextBuilder">DirPageContextBuilder dirPageContextBuilder = new DirPageContextBuilder(
62 targetRootDir, templateService, bakeId);
63 final PageVars extensionVars = PageVars.empty();
64 final PageContext pageContext = dirPageContextBuilder.buildPageContext(
65 targetRootDir, dirBakeOptions, extensionVars);
66
67 return new DirBakerContext(
68 sourceRootDir,
69 targetRootDir,
70 dirPageContextBuilder,
71 dirBakeOptions,
72 pageContext,
73 extensionVars);
74 }
75
76
77
78
79
80 public Path sourceRootDir() {
81 return _sourceRootDir;
82 }
83
84
85
86
87
88 public DirBakeOptions dirBakeOptions() {
89 return _dirBakeOptions;
90 }
91
92
93
94
95
96 public PageContext pageContext() {
97 return _pageContext;
98 }
99
100
101
102
103
104 public DirBakerContext buildForChildDir(
105 final Path childTargetDir,
106 final DirBakeOptions childSpecificDirBakeOptions,
107 final Function<PageContext, PageVars> contextEnricher) {
108
109 final DirBakeOptions childDirBakeOptions =
110 childSpecificDirBakeOptions.mergeOnTopOf(_dirBakeOptions);
111 final PageContext childPageContext = _dirPageContextBuilder.buildPageContext(
112 childTargetDir, childDirBakeOptions, _extensionVars);
113 final PageVars childNewExtensionVars = contextEnricher.apply(childPageContext);
114 final PageVars childExtensionVars = PageVarsBuilder.create(_extensionVars)
115 .addPageVars(childNewExtensionVars)
116 .build();
117 final PageContext extendedChildPageContext = PageContextBuilder.create(childPageContext)
118 .addPageVars(childExtensionVars)
119 .build();
120
121 return new DirBakerContext(
122 _sourceRootDir,
123 _targetRootDir,
124 _dirPageContextBuilder,
125 childDirBakeOptions,
126 extendedChildPageContext,
127 childExtensionVars);
128 }
129
130 }