Skip to content
Snippets Groups Projects
GenerateProducts.java 3.27 KiB
Newer Older
Colton Jobes's avatar
Colton Jobes committed
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.lang.reflect.Method;
Colton Jobes's avatar
Colton Jobes committed
import java.io.*;

public class GenerateProducts {
    public static final String listStart = "<ul>";
    public static final String listEnd = "</ul>";
    public static final String itemStart = "<li>";
    public static final String itemEnd = "</li>";

    public static void main(String[] args) throws Exception {
        Class<?> products = Products.class;
        Class<?> product = Product.class;
        Object dummy = products.getDeclaredConstructor().newInstance();

        clearFiles("products");
        PrintStream out = new PrintStream(new FileOutputStream("index.html", true));

        Method[] methods = products.getMethods();
        List<Method> productList = Arrays.stream(methods)
                .filter(line -> line.getReturnType().equals(product))
                .collect(Collectors.toList());

        for (Method m : productList) {
            // Get info about the product
            Product p = (Product)m.invoke(dummy);
            String name = p.getName();
            String description = p.getDescription();
            String picture = p.getPicture();
            double price = p.getPrice();

            // Create new file
            File productFile = new File("products/" + name + ".html");
            productFile.createNewFile();
            PrintStream outProductFile = new PrintStream(productFile);
            printHeader(outProductFile, name);

            out.println(indent(5) + itemStart + "<a class=\"entry\" href=\"products/" + name + ".html\">" + name + "</a>" + itemEnd);

            outProductFile.println(indent(3) + listStart);
            outProductFile.println(indent(4) + itemStart + "<span class=\"about\">Product Description: " +  description + "</span>" + itemEnd);
            outProductFile.println(indent(4) + itemStart + "<span class=\"about\">Price: $" + price + "</span>" + itemEnd);
            outProductFile.println(indent(4) +  "<img src=\"" + "../images/products/" + picture + "\" target=\"_blank\"></img>");
            outProductFile.println(indent(3) + listEnd);

            printFooter(outProductFile);
        }

        out.close();
    }

    private static void clearFiles(String dir) {
        File currentDir = new File(dir);

        if (!currentDir.exists())
            currentDir.mkdir();

        for (File f : currentDir.listFiles()) {
            if (f.getName().endsWith(".html")) {
                f.delete();
            }
        }
    }

    private static void printHeader(PrintStream out, String title) {
        out.println("<html>");
        out.println(indent(1) + "<head>");
        out.println(indent(2) + "<link rel=\"stylesheet\" href=\"../assets/style.css\">");
        out.println(indent(2) + "<title>" + title + "</title>");
        out.println(indent(1) + "</head>");
        out.println(indent(1) + "<body>");
        out.println(indent(2) + "<h1>" + title + "</h1>");
    }

    private static void printFooter(PrintStream out) {
        out.println(indent(2) + listEnd);
        out.println(indent(1) + "</body>");
        out.println("</html>");
    }

    private static String indent(int n) {
        String s = "";
        for (int i = 0; i < n * 4; i++) {
            s += " ";
        }
        return s;
    }
}