Skip to content

Instantly share code, notes, and snippets.

@KengoTODA
Created February 21, 2011 13:01
Show Gist options
  • Select an option

  • Save KengoTODA/837032 to your computer and use it in GitHub Desktop.

Select an option

Save KengoTODA/837032 to your computer and use it in GitHub Desktop.
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