View Javadoc
1   /**************************************************************************
2    *
3    * Copyright (c) 2019 Yawg project contributors.
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  /* default */ 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 }