diff options
author | 2021-12-22 12:22:43 +0100 | |
---|---|---|
committer | 2021-12-22 12:22:43 +0100 | |
commit | cc2b8aab9177d562b6f06471ea87867940e56e68 (patch) | |
tree | d7c2ab5bae1fe92569082fe3ffde8054aa43ac70 | |
parent | e6414b63a56deae90928808f9d0a6c9e2364b63d (diff) | |
download | hyde-cc2b8aab9177d562b6f06471ea87867940e56e68.tar.gz hyde-cc2b8aab9177d562b6f06471ea87867940e56e68.zip |
Backup before delete
-rwxr-xr-x | genwebsite.sh.mk | 3 | ||||
-rw-r--r-- | pom.xml | 5 | ||||
-rw-r--r-- | src/main/java/it/alessandroiezzi/genwebsite/Genwebsite.java | 113 | ||||
-rw-r--r-- | src/main/java/it/alessandroiezzi/genwebsite/Page.java | 64 | ||||
-rw-r--r-- | src/main/java/it/alessandroiezzi/genwebsite/Website.java | 5 |
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 $@ @@ -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 -> { |