Code refactoring
[meviz.git] / src / main / java / eu / svjatoslav / meviz / htmlindexer / layouts / Layout.java
diff --git a/src/main/java/eu/svjatoslav/meviz/htmlindexer/layouts/Layout.java b/src/main/java/eu/svjatoslav/meviz/htmlindexer/layouts/Layout.java
new file mode 100755 (executable)
index 0000000..ef250e5
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+ * Meviz - Various tools collection to work with multimedia.
+ * Copyright (C) 2012 -- 2019, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of version 3 of the GNU Lesser General Public License
+ * or later as published by the Free Software Foundation.
+*/
+
+package eu.svjatoslav.meviz.htmlindexer.layouts;
+
+import eu.svjatoslav.meviz.htmlindexer.IndexingContext;
+import eu.svjatoslav.meviz.htmlindexer.indexer.AbstractIndexer;
+import eu.svjatoslav.meviz.htmlindexer.metadata.DirectoryMetadata;
+import eu.svjatoslav.meviz.htmlindexer.metadata.fileTypes.AbstractFile;
+import eu.svjatoslav.meviz.htmlindexer.metadata.fileTypes.Picture;
+import eu.svjatoslav.meviz.htmlindexer.metadata.fileTypes.Video;
+
+import java.util.List;
+
+/**
+ * In order to have possibility of several different layouts per directory.
+ * Universal interface is defined.
+ * <p>
+ * Layout implementation is responsible for actual HTML generation.
+ */
+
+public interface Layout {
+
+    /**
+     * Enlist directory.
+     */
+    void enlistDirectory(AbstractFile directory,
+                         DirectoryMetadata parentDirectoryMetadata);
+
+    /**
+     * Enlist simple file.
+     */
+    void enlistFile(AbstractFile file,
+                    DirectoryMetadata parentDirectoryMetadata);
+
+    /**
+     * Enlist image file.
+     */
+    void enlistImage(Picture picture,
+                     DirectoryMetadata parentDirectoryMetadata);
+
+    /**
+     * Enlist video file.
+     */
+    void enlistVideo(Video file);
+
+    /**
+     * Return layout specific suffix that will be appended between
+     * index(suffix).html of generated file. This way multiple layouts can
+     * coexist in the same directory, each residing in its own HTML file.
+     */
+    String getFileNameSuffix();
+
+    /**
+     * After necessary files have been enlisted for particular directory, use
+     * this method to retrieve generated HTML result.
+     */
+    String getHtml(final boolean showTitle,
+                   final boolean doHtmlHeaderAndFooter, DirectoryMetadata metadata)
+    ;
+
+    /**
+     * Initialize layout for particular directory.
+     */
+    void init(String galleryTitle, List<String> path,
+              final AbstractIndexer indexer, IndexingContext context);
+
+}