123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- /*
- * Copyright 2000-2018 Vaadin Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
- 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 org.apache.commons.cli.CommandLine;
- import org.apache.commons.cli.CommandLineParser;
- import org.apache.commons.cli.HelpFormatter;
- import org.apache.commons.cli.Options;
- import org.apache.commons.cli.ParseException;
- import org.apache.commons.cli.PosixParser;
-
- import com.vaadin.sass.internal.ScssStylesheet;
-
- /**
- * Helper to combine css divided into separate per component dirs into one to
- * optimize http requests.
- */
- public class CompileTheme {
-
- /**
- * @param args
- * @throws IOException
- * @throws ParseException
- */
- public static void main(String[] args) throws IOException, ParseException {
- Options options = new Options();
- options.addOption("t", "theme", true, "the theme to compile");
- options.addOption("f", "theme-folder", true,
- "the folder containing the theme");
- options.addOption("v", "version", true,
- "the Vaadin version to compile for");
- CommandLineParser parser = new PosixParser();
- CommandLine params = parser.parse(options, args);
- if (!params.hasOption("theme") || !params.hasOption("theme-folder")
- || !params.hasOption("version")) {
- // automatically generate the help statement
- HelpFormatter formatter = new HelpFormatter();
- formatter.printHelp(CompileTheme.class.getName(), options);
- return;
- }
- String themeName = params.getOptionValue("theme");
- String themeFolder = params.getOptionValue("theme-folder");
- String version = params.getOptionValue("version");
-
- // Regular theme
- try {
- processSassTheme(themeFolder, themeName, "styles", version);
- System.out.println(
- "Compiling theme " + themeName + " styles successful");
- } catch (Exception e) {
- System.err
- .println("Compiling theme " + themeName + " styles failed");
- e.printStackTrace();
- }
- // Legacy theme w/o .themename{} wrapping
- try {
- String legacyFile = themeFolder + File.separator + themeName
- + File.separator + "legacy-styles.scss";
- if (new File(legacyFile).exists()) {
- processSassTheme(themeFolder, themeName, "legacy-styles",
- version);
- System.out.println("Compiling theme " + themeName
- + " legacy-styles successful");
- }
- } catch (Exception e) {
- System.err.println(
- "Compiling theme " + themeName + " legacy-styles failed");
- e.printStackTrace();
- }
- }
-
- private static void processSassTheme(String themeFolder, String themeName,
- String variant, String version) throws Exception {
-
- StringBuffer cssHeader = new StringBuffer();
-
- String stylesCssDir = themeFolder + File.separator + themeName
- + File.separator;
-
- String stylesCssName = stylesCssDir + variant + ".css";
-
- // Process as SASS file
- String sassFile = stylesCssDir + variant + ".scss";
-
- ScssStylesheet scss = ScssStylesheet.get(sassFile);
- if (scss == null) {
- throw new IllegalArgumentException(
- "SASS file: " + sassFile + " not found");
- }
- scss.compile();
- String filteredScss = scss.printState().replace("@version@", version);
-
- BufferedWriter out = new BufferedWriter(new FileWriter(stylesCssName));
- out.write(cssHeader.toString());
- out.write(filteredScss);
- out.close();
-
- System.out.println("Compiled CSS to " + stylesCssName + " ("
- + filteredScss.length() + " bytes)");
-
- createSprites(themeFolder, themeName);
- File oldCss = new File(stylesCssName);
- File newCss = new File(stylesCssDir + variant + "-sprite.css");
-
- if (newCss.exists()) {
- // Theme contained sprites. Renamed "styles-sprite.css" ->
- // "styles.css"
- oldCss.delete();
-
- boolean ok = newCss.renameTo(oldCss);
- if (!ok) {
- throw new RuntimeException(
- "Rename " + newCss + " -> " + oldCss + " failed");
- }
- }
-
- }
-
- private static void createSprites(String themeFolder, String themeName)
- throws FileNotFoundException, IOException {
- try {
- // Try loading the class separately from using it to avoid
- // hiding other classpath issues
- Class<?> smartSpritesClass = org.carrot2.labs.smartsprites.SmartSprites.class;
- } catch (NoClassDefFoundError e) {
- System.err.println(
- "Could not find smartsprites. No sprites were generated. The theme should still work.");
- return;
- }
-
- String[] parameters = new String[] { "--sprite-png-depth", "AUTO",
- "--css-file-suffix", "-sprite", "--css-file-encoding", "UTF-8",
- "--root-dir-path", themeFolder + File.separator + themeName,
- "--log-level", "WARN" };
-
- org.carrot2.labs.smartsprites.SmartSprites.main(parameters);
- System.out.println("Generated sprites");
-
- }
- }
|