Skip to content

Commit

Permalink
Add files watcher for rebuild preview
Browse files Browse the repository at this point in the history
  • Loading branch information
phuongnq committed Oct 5, 2023
1 parent 02ab0c0 commit 93d00b4
Show file tree
Hide file tree
Showing 10 changed files with 302 additions and 33 deletions.
6 changes: 6 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -396,6 +396,12 @@
</exclusions>
</dependency>

<dependency>
<groupId>io.methvin</groupId>
<artifactId>directory-watcher</artifactId>
<version>${directory-watcher.version}</version>
</dependency>

<!-- Test dependencies -->
<dependency>
<groupId>org.springframework</groupId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -144,5 +144,4 @@ protected File getSitesFolder() {
return null;
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -67,9 +67,12 @@
import org.tuckey.web.filters.urlrewrite.UrlRewriter;

import javax.servlet.ServletContext;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URLClassLoader;
import java.util.*;
import java.util.concurrent.Executor;
Expand Down Expand Up @@ -451,6 +454,25 @@ public SiteContext createContext(String siteName) {
}
}

/**
* Resolve root folder path
* @param siteName site name
* @return the root folder absolute path
*/
public String resolveRootFolderPath(String siteName) throws URISyntaxException {
Map<String, String> macroValues = new HashMap<>();
macroValues.put(siteNameMacroName, siteName);

if (publishingTargetResolver instanceof SiteAwarePublishingTargetResolver) {
String target = ((SiteAwarePublishingTargetResolver) publishingTargetResolver).getPublishingTarget(siteName);
macroValues.put(publishingTargetMacroName, target);
}

String resolvedRootFolderPath = macroResolver.resolveMacros(rootFolderPath, macroValues);

return new File(new URI(resolvedRootFolderPath)).getAbsolutePath();
}

protected HierarchicalConfiguration getConfig(SiteContext siteContext, String[] configPaths,
ResourceLoader resourceLoader) {
String siteName = siteContext.getSiteName();
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,9 @@
<property name="contextBuildRetryWaitTimeBase" value="${crafter.engine.site.context.build.retry.waitTimeBase}"/>
<property name="contextBuildRetryWaitTimeMultiplier" value="${crafter.engine.site.context.build.retry.waitTimeMultiplier}"/>
<property name="modePreview" value="${crafter.engine.preview}"/>
<property name="watcherPaths" value="${crafter.engine.watcher.paths}"/>
<property name="watcherCounterLimit" value="${crafter.engine.watcher.counter.limit}"/>
<property name="watcherIntervalPeriod" value="${crafter.engine.watcher.interval.period}"/>
</bean>

<!-- ////////////////////////////////// -->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,9 @@
<property name="contextBuildRetryWaitTimeBase" value="${crafter.engine.site.context.build.retry.waitTimeBase}"/>
<property name="contextBuildRetryWaitTimeMultiplier" value="${crafter.engine.site.context.build.retry.waitTimeMultiplier}"/>
<property name="modePreview" value="${crafter.engine.preview}"/>
<property name="watcherPaths" value="${crafter.engine.watcher.paths}"/>
<property name="watcherCounterLimit" value="${crafter.engine.watcher.counter.limit}"/>
<property name="watcherIntervalPeriod" value="${crafter.engine.watcher.interval.period}"/>
</bean>

<!-- ////////////////////////////////// -->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,9 @@
<property name="contextBuildRetryWaitTimeBase" value="${crafter.engine.site.context.build.retry.waitTimeBase}"/>
<property name="contextBuildRetryWaitTimeMultiplier" value="${crafter.engine.site.context.build.retry.waitTimeMultiplier}"/>
<property name="modePreview" value="${crafter.engine.preview}"/>
<property name="watcherPaths" value="${crafter.engine.watcher.paths}"/>
<property name="watcherCounterLimit" value="${crafter.engine.watcher.counter.limit}"/>
<property name="watcherIntervalPeriod" value="${crafter.engine.watcher.interval.period}"/>
</bean>

<bean id="crafter.siteContextFactory" class="org.craftercms.engine.service.context.SiteContextFactory">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,9 @@
<property name="contextBuildRetryWaitTimeBase" value="${crafter.engine.site.context.build.retry.waitTimeBase}"/>
<property name="contextBuildRetryWaitTimeMultiplier" value="${crafter.engine.site.context.build.retry.waitTimeMultiplier}"/>
<property name="modePreview" value="${crafter.engine.preview}"/>
<property name="watcherPaths" value="${crafter.engine.watcher.paths}"/>
<property name="watcherCounterLimit" value="${crafter.engine.watcher.counter.limit}"/>
<property name="watcherIntervalPeriod" value="${crafter.engine.watcher.interval.period}"/>
</bean>

<!-- AWS S3 Content Store Adapter -->
Expand Down
9 changes: 9 additions & 0 deletions src/main/resources/crafter/engine/server-config.properties
Original file line number Diff line number Diff line change
Expand Up @@ -461,3 +461,12 @@ crafter.engine.freemarker.statics.enable=false

# The path pattern used to load plugin configuration
crafter.engine.plugins.config.pattern=/config/plugins/${pluginId}/config.xml

# Engine file change watcher paths
crafter.engine.watcher.paths=\
/scripts,\
/config/engine
# Engine file change watcher counter limit to rebuild
crafter.engine.watcher.counter.limit=5
# Engine file change watcher thread interval in milliseconds
crafter.engine.watcher.interval.period=200
Original file line number Diff line number Diff line change
Expand Up @@ -544,6 +544,9 @@
<property name="contextBuildRetryWaitTimeBase" value="${crafter.engine.site.context.build.retry.waitTimeBase}"/>
<property name="contextBuildRetryWaitTimeMultiplier" value="${crafter.engine.site.context.build.retry.waitTimeMultiplier}"/>
<property name="modePreview" value="${crafter.engine.preview}"/>
<property name="watcherPaths" value="${crafter.engine.watcher.paths}"/>
<property name="watcherCounterLimit" value="${crafter.engine.watcher.counter.limit}"/>
<property name="watcherIntervalPeriod" value="${crafter.engine.watcher.interval.period}"/>
</bean>

<bean id="crafter.siteContextsBootstrap" class="org.craftercms.engine.service.context.SiteContextsBootstrap">
Expand Down

0 comments on commit 93d00b4

Please sign in to comment.