aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlessandro Iezzi <aiezzi@alessandroiezzi.it>2021-12-22 12:22:43 +0100
committerAlessandro Iezzi <aiezzi@alessandroiezzi.it>2021-12-22 12:22:43 +0100
commitcc2b8aab9177d562b6f06471ea87867940e56e68 (patch)
treed7c2ab5bae1fe92569082fe3ffde8054aa43ac70
parente6414b63a56deae90928808f9d0a6c9e2364b63d (diff)
downloadhyde-cc2b8aab9177d562b6f06471ea87867940e56e68.tar.gz
hyde-cc2b8aab9177d562b6f06471ea87867940e56e68.zip
Backup before delete
-rwxr-xr-xgenwebsite.sh.mk3
-rw-r--r--pom.xml5
-rw-r--r--src/main/java/it/alessandroiezzi/genwebsite/Genwebsite.java113
-rw-r--r--src/main/java/it/alessandroiezzi/genwebsite/Page.java64
-rw-r--r--src/main/java/it/alessandroiezzi/genwebsite/Website.java5
5 files changed, 149 insertions, 41 deletions
diff --git a/genwebsite.sh.mk b/genwebsite.sh.mk
deleted file mode 100755
index 4caeb99..0000000
--- a/genwebsite.sh.mk
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-
-java -jar DESTDIR $@
diff --git a/pom.xml b/pom.xml
index d4b8a6c..6dae9b8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -47,6 +47,11 @@
<version>1.4</version>
</dependency>
<dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ <version>2.8.0</version>
+ </dependency>
+ <dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.11.1</version>
diff --git a/src/main/java/it/alessandroiezzi/genwebsite/Genwebsite.java b/src/main/java/it/alessandroiezzi/genwebsite/Genwebsite.java
index c1a015d..553c370 100644
--- a/src/main/java/it/alessandroiezzi/genwebsite/Genwebsite.java
+++ b/src/main/java/it/alessandroiezzi/genwebsite/Genwebsite.java
@@ -24,6 +24,9 @@ import freemarker.template.Template;
import freemarker.template.TemplateException;
import freemarker.template.TemplateExceptionHandler;
import org.apache.commons.cli.*;
+
+import org.apache.commons.io.FileUtils;
+
import org.apache.commons.lang3.StringUtils;
import java.io.*;
@@ -52,10 +55,19 @@ public class Genwebsite {
XmlMapper xmlMapper = new XmlMapper();
Website website = xmlMapper.readValue(websiteXml, Website.class);
- website.setRootDir(websiteXml.getAbsoluteFile().getParent());
- File outDir = Paths.get(website.getRootDir()).resolve("build").toFile();
+ // Where to build
+ String websiteDir = websiteXml.getAbsoluteFile().getParent();
+ if (website.getRootDir() == null || website.getRootDir().isEmpty()) {
+ website.setRootDir(websiteDir);
+ }
+ System.out.println("Root dir is: " + website.getRootDir());
+ File outDir = Paths.get(websiteDir).resolve("build").toFile();
outDir.mkdirs();
+ for (Dir dir : website.getIncludes()) {
+ FileUtils.copyDirectory(new File(dir.getName()), Paths.get(outDir.toURI()).resolve(new File(dir.getName()).getName()).toFile());
+ }
+
//Freemarker configuration object
Configuration cfg = new Configuration(Configuration.VERSION_2_3_29);
cfg.setDirectoryForTemplateLoading(new File(website.getRootDir()));
@@ -68,35 +80,62 @@ public class Genwebsite {
try {
for (Page page : website.getPages()) {
String pageTemplate = website.getTemplate();
-
- if (StringUtils.isNotBlank(page.getTemplate())) {
- pageTemplate = page.getTemplate();
+ List<File> files = new ArrayList<>();
+
+ if (page.getIn() != null && !page.getIn().isEmpty()) {
+ File file = new File(page.getIn());
+ if (file.isDirectory()) {
+ listf(page.getIn(), files);
+ } else {
+ files.add(new File(page.getIn()));
+ }
}
- //Load template from source folder
- Template template = cfg.getTemplate(pageTemplate);
-
- // Build the data-model
- Map<String, Object> data = new HashMap<>();
- data.put("title", page.getTitle());
- data.put("content", page.parse());
- data.put(page.getId() + "Active", "class=\"active\"");
-
- // Console output
- /*
- Writer out = new OutputStreamWriter(System.out);
- template.process(data, out);
- out.flush();
- */
-
- File pageFile = Paths.get(outDir.getAbsolutePath()).resolve(page.getOut()).toFile();
- pageFile.getParentFile().mkdirs();
-
- // File output
- Writer file = new FileWriter(pageFile);
- template.process(data, file);
- file.flush();
- file.close();
+ String pageOut = page.getOut();
+
+ for (File curFile : files) {
+ System.out.println("Processing: " + curFile.getPath());
+ page.setIn(curFile.getPath());
+ page.parse();
+ if (StringUtils.isNotBlank(page.getTemplate())) {
+ pageTemplate = page.getTemplate();
+ }
+
+ //Load template from source folder
+ Template template = cfg.getTemplate(pageTemplate);
+
+ // Build the data-model
+ Map<String, Object> data = new HashMap<>();
+ data.put("title", page.getTitle());
+ data.put("date", page.getDate());
+ System.out.println(page.getDate() + " " + page.getTitle());
+ data.put("content", page.getContent());
+ data.put("globals", website.getGlobals());
+ data.put(page.getId() + "Active", "class=\"active\"");
+
+ // Console output
+ /*
+ Writer out = new OutputStreamWriter(System.out);
+ template.process(data, out);
+ out.flush();
+ */
+
+ if (pageOut == null || pageOut.isEmpty()) {
+ page.setOut(curFile.getPath().replace(".md", ".html"));
+ System.out.println("Out dir page: " + page.getOut());
+ }
+ File pageFile = Paths.get(outDir.getAbsolutePath()).resolve(page.getOut()).toFile();
+ pageFile.getParentFile().mkdirs();
+ if (pageFile.isDirectory()) {
+ pageFile = Paths.get(pageFile.getPath()).resolve(page.getIn()).toFile();
+ }
+
+ // File output
+ Writer file = new FileWriter(pageFile);
+ template.process(data, file);
+ file.flush();
+ file.close();
+ }
}
} catch (IOException e) {
@@ -105,4 +144,20 @@ public class Genwebsite {
e.printStackTrace();
}
}
+
+ public static void listf(String directoryName, List<File> files) {
+ File directory = new File(directoryName);
+
+ // Get all files from a directory.
+ File[] fList = directory.listFiles();
+ if(fList != null) {
+ for (File file : fList) {
+ if (file.isFile()) {
+ files.add(file);
+ } else if (file.isDirectory()) {
+ listf(file.getPath(), files);
+ }
+ }
+ }
+ }
}
diff --git a/src/main/java/it/alessandroiezzi/genwebsite/Page.java b/src/main/java/it/alessandroiezzi/genwebsite/Page.java
index b3f5f4c..b36c78f 100644
--- a/src/main/java/it/alessandroiezzi/genwebsite/Page.java
+++ b/src/main/java/it/alessandroiezzi/genwebsite/Page.java
@@ -33,15 +33,43 @@ public class Page {
@Setter private String rootDir = "";
@Getter @Setter private String out = "";
@Getter @Setter private String content = "";
- @Getter @Setter private String in = "";
+ @Getter private String in = "";
@Getter @Setter private String template = "";
- @Getter @Setter private String title = "";
+ @Setter private String title = "";
@Getter @Setter private String id = "";
+ @Getter @Setter private String dir = "";
+ @Getter private boolean parsed = false;
+ @Getter private String date;
+
+ public Page() {
+ date = new String("");
+ }
+
+ public String getTitle() {
+ if (!parsed) {
+ throw new RuntimeException("You must call parse before getTitle");
+ }
+
+ System.out.println("Page title: " + title);
+
+ return title;
+ }
+
+ public void setIn(String in) {
+ parsed = false;
+ this.in = in;
+ }
+
+ public void setDate(String date) {
+ this.date = date;
+ System.out.println("-------------------> " + date);
+ }
public String parse() throws IOException {
- if (content != null && !content.isEmpty()) {
+ if (parsed)
return content;
- } else if (in != null && !in.isEmpty() && !in.trim().isEmpty()) {
+
+ if (in != null && !in.isEmpty() && !in.trim().isEmpty()) {
String[] splited = in.split("\\.");
String extension = splited[splited.length - 1];
@@ -49,11 +77,27 @@ public class Page {
BufferedReader br = Files.newBufferedReader(Paths.get(rootDir).resolve(in));
String line;
while ((line = br.readLine()) != null) {
- sb.append(line).append("\n");
+ if (line.startsWith("# property:")) {
+ String property = line.replace("# property:", "");
+ String[] splitted = property.split("=");
+ if (splitted.length > 1) {
+ switch(splitted[0].trim()) {
+ case "title":
+ title = splitted[1].trim();
+ break;
+ case "date":
+ date = splitted[1].trim();
+ break;
+ }
+ }
+ } else {
+ sb.append(line).append("\n");
+ }
}
switch (extension) {
case "md":
+ System.out.println("Parsing markdown");
MutableDataSet options = new MutableDataSet();
// uncomment to set optional extensions
@@ -68,14 +112,18 @@ public class Page {
// You can re-use parser and renderer instances
Node document = parser.parse(sb.toString());
- return renderer.render(document);
+ content = renderer.render(document);
+ break;
case "html":
case "htm":
case "xhtm":
- return sb.toString();
+ content = sb.toString();
+ break;
}
}
- return "";
+ parsed = true;
+
+ return content;
}
}
diff --git a/src/main/java/it/alessandroiezzi/genwebsite/Website.java b/src/main/java/it/alessandroiezzi/genwebsite/Website.java
index 57ea472..652043e 100644
--- a/src/main/java/it/alessandroiezzi/genwebsite/Website.java
+++ b/src/main/java/it/alessandroiezzi/genwebsite/Website.java
@@ -24,13 +24,16 @@ import org.apache.commons.lang3.StringUtils;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
+import java.util.HashMap;
public class Website {
- @Getter private List<Dir> includes;
+ @Getter private List<Dir> includes = new ArrayList<>();
@Getter private String rootDir;
@Setter private String pagesDir;
@Getter @Setter private String template;
@Getter @Setter private List<Page> pages = new ArrayList<>();
+ @Getter private Map<String, String> globals = new HashMap<>();
public void setRootDir(String rootDir) {
this.pages.forEach(p -> {