aboutsummaryrefslogtreecommitdiffstats
path: root/theme-compiler/src/com/vaadin/buildhelpers/CompileDefaultTheme.java
blob: 5b17ae4902e182725a39844febaa5c88521946d7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
package com.vaadin.buildhelpers;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;

import com.vaadin.sass.ScssStylesheet;

/**
 * Helper to combine css divided into separate per component dirs into one to
 * optimize http requests.
 */
public class CompileDefaultTheme {

    private static final String ARG_VERSION = "-version";

    private static final String THEME_DIR = "./WebContent/VAADIN/themes/";
    private static final String BASE = "base";
    private static final String RUNO = "runo";
    private static final String REINDEER = "reindeer";
    private static final String LIFERAY = "liferay";
    private static final String CHAMELEON = "chameleon";

    /**
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {
        String ver = null;
        for (int i = 0; i < args.length; i++) {
            if (ARG_VERSION.equals(args[i])) {
                if (args.length >= i) {
                    ver = args[i + 1];
                }
                break;
            }
        }

        for (String themeName : new String[] { BASE, RUNO, LIFERAY, CHAMELEON }) {
            try {
                processSassTheme(themeName, false, ver);
                System.out.println("Compiling theme " + themeName
                        + " successful");
            } catch (Exception e) {
                System.err.println("Compiling theme " + themeName + " failed");
                e.printStackTrace();
            }
        }

        // Compile Reindeer last, since it requires the spriting operation
        // (makes testing the other themes a bit faster, since you don't need to
        // wait for the spriting operation to finish before the theme CSS is
        // compiled)
        for (String themeName : new String[] { REINDEER }) {
            try {
                processSassTheme(themeName, true, ver);
                System.out.println("Compiling theme " + themeName
                        + " successful");
            } catch (Exception e) {
                System.err.println("Compiling theme " + themeName + " failed");
                e.printStackTrace();
            }
        }
    }

    private static void processSassTheme(String themeName,
            boolean useSmartSprites, String version) throws Exception {

        StringBuffer cssHeader = new StringBuffer();

        // Theme version
        if (version == null) {
            version = "9.9.9.INTERNAL-DEBUG-BUILD";
        }
        version = version.replaceAll("\\.", "_");
        cssHeader.append(".v-theme-version:after {content:\"" + version
                + "\";}\n");
        cssHeader.append(".v-theme-version-" + version + " {display: none;}\n");

        String stylesCssDir = THEME_DIR + themeName + "/";
        String stylesCssName = stylesCssDir + "styles.css";

        // Process as SASS file
        ScssStylesheet scss = ScssStylesheet.get(stylesCssDir + "styles.scss");
        scss.compile();

        BufferedWriter out = new BufferedWriter(new FileWriter(stylesCssName));
        out.write(cssHeader.toString());
        out.write(scss.toString());
        out.close();

        System.out.println("Compiled CSS to " + stylesCssName + " ("
                + scss.toString().length() + " bytes)");

        if (useSmartSprites) {
            createSprites(themeName);
            System.out.println("Used SmartSprites to create sprites");
            File oldCss = new File(stylesCssName);
            oldCss.delete();

            File newCss = new File(stylesCssDir + "styles-sprite.css");
            boolean ok = newCss.renameTo(oldCss);
            if (!ok) {
                System.out.println("Rename " + newCss + " -> " + oldCss
                        + " failed");
            }
        }
    }

    private static void createSprites(String themeName)
            throws FileNotFoundException, IOException {
        String[] parameters = new String[] { "--sprite-png-depth", "AUTO",
                "--css-file-suffix", "-sprite", "--css-file-encoding", "UTF-8",
                "--root-dir-path", THEME_DIR + themeName, "--log-level", "WARN" };

        org.carrot2.labs.smartsprites.SmartSprites.main(parameters);

    }
}