Created
February 21, 2011 13:01
-
-
Save KengoTODA/837032 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Index: src/main/java/in/partake/servlet/listener/InitializationListener.java | |
| =================================================================== | |
| --- src/main/java/in/partake/servlet/listener/InitializationListener.java (revision 335) | |
| +++ src/main/java/in/partake/servlet/listener/InitializationListener.java (working copy) | |
| @@ -1,11 +1,18 @@ | |
| package in.partake.servlet.listener; | |
| -import java.io.File; | |
| -import java.io.FilenameFilter; | |
| - | |
| import in.partake.daemon.TwitterDaemon; | |
| import in.partake.view.Helper; | |
| +import java.io.BufferedReader; | |
| +import java.io.BufferedWriter; | |
| +import java.io.File; | |
| +import java.io.FileInputStream; | |
| +import java.io.FileOutputStream; | |
| +import java.io.FilenameFilter; | |
| +import java.io.IOException; | |
| +import java.io.InputStreamReader; | |
| +import java.io.OutputStreamWriter; | |
| + | |
| import javax.servlet.ServletContextEvent; | |
| import javax.servlet.ServletContextListener; | |
| @@ -19,27 +26,93 @@ | |
| public void contextInitialized(ServletContextEvent arg0) { | |
| TwitterDaemon.getInstance().schedule(); | |
| initializeCssVersion(arg0); | |
| + try { | |
| + compositeCssFiles(arg0); | |
| + } catch (IOException e) { | |
| + throw new RuntimeException(e); | |
| + } | |
| } | |
| private void initializeCssVersion(ServletContextEvent event) { | |
| String cssPath = event.getServletContext().getRealPath("css"); | |
| File cssDir = new File(cssPath); | |
| + if (!cssDir.exists()) { | |
| + logger.warn("css directory doesn't exist."); | |
| + return; | |
| + } | |
| + | |
| long version = 0L; | |
| - if (cssDir.exists()) { | |
| - for (File cssFile : cssDir.listFiles(new FilenameFilter(){ | |
| - @Override | |
| - public boolean accept(File dir, String name) { | |
| - return name.endsWith(".css"); | |
| - } | |
| - })) { | |
| - version ^= cssFile.lastModified(); | |
| + for (File cssFile : cssDir.listFiles(new FilenameFilter(){ | |
| + @Override | |
| + public boolean accept(File dir, String name) { | |
| + return name.endsWith(".css") && name.equals("style.css"); | |
| } | |
| - } else { | |
| - logger.warn("cannot find the css/ directory."); | |
| + })) { | |
| + version ^= cssFile.lastModified(); | |
| } | |
| Helper.setCssVersion(Long.toString(version)); | |
| }; | |
| + private void compositeCssFiles(ServletContextEvent event) throws IOException { | |
| + String cssPath = event.getServletContext().getRealPath("css"); | |
| + File cssDir = new File(cssPath); | |
| + if (!cssDir.exists()) { | |
| + logger.warn("css directory doesn't exist."); | |
| + return; | |
| + } | |
| + | |
| + File outFile = new File(cssDir, "style.css"); | |
| + BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "UTF-8")); | |
| + try { | |
| + writer.write("@charset \"UTF-8\";"); | |
| + writer.newLine(); | |
| + | |
| + for (String inFileName : new String[]{"layout.css", "color.css", "font.css", "openid.css", "print.css"}){ | |
| + File inFile = new File(cssDir, inFileName); | |
| + if (!inFile.exists() || !inFile.canRead()) { | |
| + logger.warn(inFileName + " is (not found | cannot read)."); | |
| + continue; | |
| + } | |
| + | |
| + writeFromFile(writer, inFile); | |
| + } | |
| + | |
| + writer.newLine(); | |
| + writer.write("/* IE reads non-doublequoted files */"); | |
| + writer.newLine(); | |
| + writer.write("@import fixie.css;"); | |
| + writer.newLine(); | |
| + } catch (IOException e) { | |
| + logger.error("IOException occured.", e); | |
| + throw e; | |
| + } finally { | |
| + try { | |
| + writer.close(); | |
| + } catch (IOException e) { | |
| + logger.error("IOException occured.", e); | |
| + throw e; | |
| + } | |
| + } | |
| + } | |
| + | |
| + private void writeFromFile(BufferedWriter writer, File inFile) throws IOException { | |
| + BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(inFile), "UTF-8")); | |
| + try { | |
| + String line; | |
| + while ((line = reader.readLine()) != null) { | |
| + if (line.startsWith("@charset") || line.isEmpty()) continue; | |
| + writer.write(line); | |
| + writer.newLine(); | |
| + } | |
| + } finally { | |
| + try { | |
| + reader.close(); | |
| + } catch (IOException ignore) { | |
| + logger.warn("Reader#close throw IOException, but it's ignored.", ignore); | |
| + } | |
| + } | |
| + } | |
| + | |
| @Override | |
| public void contextDestroyed(ServletContextEvent arg0) { | |
| try { | |
| @@ -49,4 +122,5 @@ | |
| logger.warn("Unintentional exception is thrown.", ignore); | |
| } | |
| } | |
| + | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment