[repository:6] First draft of FreeMarkerOnGrizzly.

  • From: survivant00@kenai.com
  • To: commits@sebastiendionne.kenai.com
  • Subject: [repository:6] First draft of FreeMarkerOnGrizzly.
  • Date: Mon, 30 Mar 2009 01:14:28 +0000 (GMT)

Repository: repository
Revision:   6
Author:     survivant00@gmail.com
Date:       2009-03-30 01:11:36 UTC
Link:      
http://kenai.com/projects/sebastiendionne/sources/repository/revision/6

Log Message:
-----------
First draft of FreeMarkerOnGrizzly.  In this demo, I will use
JaudioTagger and FreeMarker to extract mp3 track info and generate a
webpage where you can see the album and download the tracks.  I'll try
this on a mp3 player using it internal mp3 library.

Added Paths:
-----------
    grizzly-related/FreeMarkerOnGrizzly/.classpath
    grizzly-related/FreeMarkerOnGrizzly/.project
    grizzly-related/FreeMarkerOnGrizzly/FreeMarkerServletTest.launch
    grizzly-related/FreeMarkerOnGrizzly/index.ftl
    grizzly-related/FreeMarkerOnGrizzly/lib/freemarker-2.3.15.jar
   
grizzly-related/FreeMarkerOnGrizzly/lib/grizzly-servlet-deployer-1.9.11
-SNAPSHOT.jar
    grizzly-related/FreeMarkerOnGrizzly/lib/jaudiotagger.jar
    grizzly-related/FreeMarkerOnGrizzly/lib/jaudiotaggersrc.jar
    grizzly-related/FreeMarkerOnGrizzly/lib/log4j-1.2.15.jar
    grizzly-related/FreeMarkerOnGrizzly/lib/slf4j-api-1.5.5.jar
    grizzly-related/FreeMarkerOnGrizzly/lib/slf4j-log4j12-1.5.5.jar
    grizzly-related/FreeMarkerOnGrizzly/resources/log4j.xml
   
grizzly-related/FreeMarkerOnGrizzly/src/ca/sebastiendionne/gallery/Mp3I
nfoExtractor.java
   
grizzly-related/FreeMarkerOnGrizzly/src/ca/sebastiendionne/gallery/mode
l/MediaFile.java
   
grizzly-related/FreeMarkerOnGrizzly/src/ca/sebastiendionne/grizzly/Free
MarkerServlerLauncher.java
   
grizzly-related/FreeMarkerOnGrizzly/src/ca/sebastiendionne/grizzly/Gall
eryFreemarkerServlet.java
   
grizzly-related/FreeMarkerOnGrizzly/test/test/FreeMarkerServletTest.jav
a
    grizzly-related/FreeMarkerOnGrizzly/test/test/HelloServlet.java
    grizzly-related/FreeMarkerOnGrizzly/test/test/MP3ExtractorTest.java
    grizzly-related/FreeMarkerOnGrizzly/test/test/SampleFreeMarker.java
    grizzly-related/FreeMarkerOnGrizzly/web.xml

Diffs:
-----
diff -r 8d5d1bf1d912 -r df6e910ed56a
grizzly-related/FreeMarkerOnGrizzly/.classpath
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/grizzly-related/FreeMarkerOnGrizzly/.classpath    Sun Mar 29
21:11:36 2009 -0400
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+       <classpathentry kind="src" path="src"/>
+       <classpathentry kind="src" path="resources"/>
+       <classpathentry kind="src" path="test"/>
+       <classpathentry kind="con"
path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.
debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+       <classpathentry kind="lib" path="lib/log4j-1.2.15.jar"/>
+       <classpathentry kind="lib" path="lib/slf4j-api-1.5.5.jar"/>
+       <classpathentry kind="lib" path="lib/slf4j-log4j12-1.5.5.jar"/>
+       <classpathentry kind="lib" path="lib/freemarker-2.3.15.jar"/>
+       <classpathentry kind="lib" path="lib/jaudiotagger.jar"
sourcepath="lib/jaudiotaggersrc.jar"/>
+       <classpathentry kind="lib" path="lib/jaudiotaggersrc.jar"/>
+       <classpathentry kind="con"
path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
+       <classpathentry combineaccessrules="false" kind="src"
path="/grizzly-servlet-deployer"/>
+       <classpathentry kind="lib"
path="lib/grizzly-servlet-deployer-1.9.11-SNAPSHOT.jar"/>
+       <classpathentry kind="output" path="classes"/>
+</classpath>
diff -r 8d5d1bf1d912 -r df6e910ed56a
grizzly-related/FreeMarkerOnGrizzly/.project
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/grizzly-related/FreeMarkerOnGrizzly/.project      Sun Mar 29
21:11:36 2009 -0400
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>FreeMarkerOnGrizzly</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.jdt.core.javabuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.jdt.core.javanature</nature>
+       </natures>
+</projectDescription>
diff -r 8d5d1bf1d912 -r df6e910ed56a
grizzly-related/FreeMarkerOnGrizzly/FreeMarkerServletTest.launch
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/grizzly-related/FreeMarkerOnGrizzly/FreeMarkerServletTest.launch 
Sun Mar 29 21:11:36 2009 -0400
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration
type="org.eclipse.jdt.launching.localJavaApplication">
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry
value="/FreeMarkerOnGrizzly/test/test/FreeMarkerServletTest.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE"
value="test.FreeMarkerServletTest"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR"
value="FreeMarkerOnGrizzly"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS"
value="-Djava.util.logging.config.file=C:/sources/workspace_personal/gr
izzly-source/classes/logging.properties"/>
+</launchConfiguration>
diff -r 8d5d1bf1d912 -r df6e910ed56a
grizzly-related/FreeMarkerOnGrizzly/index.ftl
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/grizzly-related/FreeMarkerOnGrizzly/index.ftl     Sun Mar 29
21:11:36 2009 -0400
@@ -0,0 +1,73 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";> 

+ <html> 
+  <head>
+    <!-- include the required JavaScript file --> 
+  </head>

+ <body>
+ <div align="center">
+    <table width="80%">
+       Hello world from FreeMarker on Grizzly
+       
+       <br />
+       
+       ici on va avoir des liens pour les fichiers
+       il va falloir ajouter le librarypath au nom du fichier
+       et faire un servlet qui va uploader le fichier
+       ... donc
+       
+       a href="/servletStreamer?toune=/ici/toune.mp3"
+       
+       lui upload le fichier via Grizzly.. hummm cool.
+       
+       <br />
+       <#if Request.list?exists>
+        <div align="center">
+               <table width="80%">
+               <#assign maxItembyRow = 2>
+                       <#assign colItemIndex = 0>
+                       <#assign count = 0>
+                       <#assign openTagNewLine = true>
+                       <#assign closeTagNewLine = false>
+
+      <#list Request.list as mediaFile>
+             <#if openTagNewLine>
+                 <#assign openTagNewLine = false>
+                     <tr>
+                 </#if>
+                 <#assign colItemIndex = colItemIndex + 1>
+         <td>
+         <#if (mediaFile.hasAlbumCover==true) >
+               <img src="${mediaFile.albumCoverPath}" />
+         </#if>
+         <a href="${mediaFile.path}"
id="player${count}">${mediaFile.name}</a>
+         </td>
+               
+         <#if (colItemIndex > maxItembyRow) >   
+                               <#assign colItemIndex = 0>
+                       <#assign closeTagNewLine = true>     
+                </#if>
+         
+                 <#if closeTagNewLine>
+                 <#assign closeTagNewLine = false>
+                 <#assign openTagNewLine = true>
+                     </tr>
+                 </#if>
+                 <#assign count = count + 1>
+                 
+      </#list>
+      <#if (colItemIndex <= maxItembyRow) >   
+               <#list colItemIndex..maxItembyRow as i>   
+                       <td>&nbsp;</td>
+               </#list>  
+               </tr>
+         </#if>
+      
+      </table>
+      </div>
+       </#if>
+        
+  </body>
+</html> 
\ No newline at end of file
diff -r 8d5d1bf1d912 -r df6e910ed56a
grizzly-related/FreeMarkerOnGrizzly/lib/freemarker-2.3.15.jar
Binary file
grizzly-related/FreeMarkerOnGrizzly/lib/freemarker-2.3.15.jar has
changed
diff -r 8d5d1bf1d912 -r df6e910ed56a
grizzly-related/FreeMarkerOnGrizzly/lib/grizzly-servlet-deployer-1.9.11
-SNAPSHOT.jar
Binary file
grizzly-related/FreeMarkerOnGrizzly/lib/grizzly-servlet-deployer-1.9.11
-SNAPSHOT.jar has changed
diff -r 8d5d1bf1d912 -r df6e910ed56a
grizzly-related/FreeMarkerOnGrizzly/lib/jaudiotagger.jar
Binary file grizzly-related/FreeMarkerOnGrizzly/lib/jaudiotagger.jar
has changed
diff -r 8d5d1bf1d912 -r df6e910ed56a
grizzly-related/FreeMarkerOnGrizzly/lib/jaudiotaggersrc.jar
Binary file grizzly-related/FreeMarkerOnGrizzly/lib/jaudiotaggersrc.jar
has changed
diff -r 8d5d1bf1d912 -r df6e910ed56a
grizzly-related/FreeMarkerOnGrizzly/lib/log4j-1.2.15.jar
Binary file grizzly-related/FreeMarkerOnGrizzly/lib/log4j-1.2.15.jar
has changed
diff -r 8d5d1bf1d912 -r df6e910ed56a
grizzly-related/FreeMarkerOnGrizzly/lib/slf4j-api-1.5.5.jar
Binary file grizzly-related/FreeMarkerOnGrizzly/lib/slf4j-api-1.5.5.jar
has changed
diff -r 8d5d1bf1d912 -r df6e910ed56a
grizzly-related/FreeMarkerOnGrizzly/lib/slf4j-log4j12-1.5.5.jar
Binary file
grizzly-related/FreeMarkerOnGrizzly/lib/slf4j-log4j12-1.5.5.jar has
changed
diff -r 8d5d1bf1d912 -r df6e910ed56a
grizzly-related/FreeMarkerOnGrizzly/resources/log4j.xml
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/grizzly-related/FreeMarkerOnGrizzly/resources/log4j.xml   Sun Mar
29 21:11:36 2009 -0400
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/";>
+  <appender name="console" class="org.apache.log4j.ConsoleAppender"> 
+    <param name="Target" value="System.out"/> 
+    <layout class="org.apache.log4j.PatternLayout"> 
+      <param name="ConversionPattern" value="%5p [%d{dd/MM/yy
HH:mm:ss}] (%c) - %m%n"/> 
+    </layout> 
+  </appender> 
+  
+  <appender name="fileAppender"
class="org.apache.log4j.DailyRollingFileAppender"> 
+    <param name="file" value="demo.log"/> 
+    <param name="Append" value="true" />
+       <param name="DatePattern" value="'.'yyyy-MM-dd" />
+    <layout class="org.apache.log4j.PatternLayout"> 
+      <param name="ConversionPattern" value="%5p [%d{dd/MM/yy
HH:mm:ss}] (%c) - %m%n"/> 
+    </layout> 
+  </appender> 
+
+  <logger name="ca.sebastiendionne" additivity="false">
+               <level value="debug" />
+               <appender-ref ref="fileAppender" />
+               <appender-ref ref="console" />
+  </logger>
+  
+  <logger name="freemarker" additivity="false">
+               <level value="debug" />
+               <appender-ref ref="fileAppender" />
+               <appender-ref ref="console" />
+  </logger>
+
+  <root> 
+    <priority value="error" /> 
+       <appender-ref ref="fileAppender" /> 
+  </root>  
+</log4j:configuration>
\ No newline at end of file
diff -r 8d5d1bf1d912 -r df6e910ed56a
grizzly-related/FreeMarkerOnGrizzly/src/ca/sebastiendionne/gallery/Mp3I
nfoExtractor.java
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++
b/grizzly-related/FreeMarkerOnGrizzly/src/ca/sebastiendionne/gallery/Mp
3InfoExtractor.java  Sun Mar 29 21:11:36 2009 -0400
@@ -0,0 +1,116 @@
+package ca.sebastiendionne.gallery;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.net.URL;
+import java.net.URLDecoder;
+import java.net.URLEncoder;
+import java.util.List;
+
+import org.jaudiotagger.audio.AudioFileIO;
+import org.jaudiotagger.audio.mp3.MP3AudioHeader;
+import org.jaudiotagger.audio.mp3.MP3File;
+import org.jaudiotagger.tag.Tag;
+import org.jaudiotagger.tag.TagField;
+import org.jaudiotagger.tag.TagFieldKey;
+import org.jaudiotagger.tag.datatype.DataTypes;
+import org.jaudiotagger.tag.id3.AbstractID3v2Frame;
+import org.jaudiotagger.tag.id3.ID3v24Frames;
+import org.jaudiotagger.tag.id3.framebody.FrameBodyAPIC;
+
+import ca.sebastiendionne.gallery.model.MediaFile;
+
+public class Mp3InfoExtractor {
+       
+       public static MediaFile extractInfo(String audioFilename,
String tempFolder) throws Exception {
+               
+                       MP3File f = (MP3File)AudioFileIO.read(new
File(audioFilename));
+                       
+                       Tag tag = f.getTag();
+                       MP3AudioHeader mp3AudioHeader =
f.getMP3AudioHeader();
+                       
+                       MediaFile mediaFile = new MediaFile();
+                       
+                       // a changer pour : album, titre, artiste,
track# ...
+                      
mediaFile.setName(tag.getFirst(ID3v24Frames.FRAME_ID_ARTIST) + " - " +
tag.getFirst(ID3v24Frames.FRAME_ID_TITLE));
+                      
mediaFile.setPath(URLEncoder.encode(audioFilename, "UTF-8"));
+                      
mediaFile.setDuration(mp3AudioHeader.getTrackLengthAsString());
+                      
mediaFile.setCodec(mp3AudioHeader.getEncoder());
+                       mediaFile.setStreamSize("2 Megs");
+                       
+                       List<TagField> albumCoverList =
f.getTag().get(TagFieldKey.COVER_ART);
+                       
+                       if(albumCoverList.size()>0){
+                               TagField imageField =
albumCoverList.get(0);
+                               
+                               File x = new File(".");
+                               
+                               File tempFolderFile = new
File(x.getCanonicalPath() + tempFolder);
+                               
+                               if(!tempFolderFile.exists()){
+                                       System.out.println("creating
temp folder for Album covers : " + tempFolderFile.getAbsolutePath());
+                                       tempFolderFile.mkdirs();
+                               }
+                               
+                               if(tempFolderFile.exists() &&
tempFolderFile.isDirectory()){
+                                       
+                                       String filename =
tempFolderFile + File.separator + f.getFile().getName();
+                               
+                               int indexExtention =
filename.lastIndexOf(".");
+                               
+                               if(indexExtention>0){
+                                       filename =
filename.substring(0,indexExtention);
+                               }
+                               
+                               // ajoute l'extension .jpg
+                               filename = filename + ".jpg";
+                               
+                                       // si le fichier existe deja on
le skip
+                               boolean coverFound = false;
+                                       File albumCover = new
File(filename);
+                                       if(!albumCover.exists()){
+                                               coverFound =
extractAlbumCover(imageField, filename);
+                                       } else {
+                                               coverFound = true;
+                                       }
+                                      
mediaFile.setAlbumCoverPath(filename);
+                                      
mediaFile.setHasAlbumCover(coverFound);
+                               }
+                       }
+                       
+                       
+                       return mediaFile;
+       }
+       
+       public static boolean extractAlbumCover(TagField imageField,
String filename) throws Exception {
+               if(imageField instanceof AbstractID3v2Frame)
+               {
+                   FrameBodyAPIC imageFrameBody =
(FrameBodyAPIC)((AbstractID3v2Frame)imageField).getBody();
+                   if(!imageFrameBody.isImageUrl())
+                   {
+                       byte[] imageRawData =
(byte[])imageFrameBody.getObjectValue(DataTypes.OBJ_PICTURE_DATA);
+                       
+                       if(imageRawData!=null){
+                               System.out.println("buf size= " +
imageRawData.length);
+                               
+                               
+                               ByteArrayOutputStream baos = new
ByteArrayOutputStream();
+                               baos.write(imageRawData);
+                               
+                               System.out.println("album saved to : "
+ filename);
+                               
+                               FileOutputStream fos = new
FileOutputStream(filename);
+                               
+                               baos.writeTo(fos);
+                               
+                               fos.close();
+                               
+                               return true;
+                       }
+                   }
+               }
+               
+               return false;
+       }
+}
diff -r 8d5d1bf1d912 -r df6e910ed56a
grizzly-related/FreeMarkerOnGrizzly/src/ca/sebastiendionne/gallery/mode
l/MediaFile.java
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++
b/grizzly-related/FreeMarkerOnGrizzly/src/ca/sebastiendionne/gallery/mo
del/MediaFile.java   Sun Mar 29 21:11:36 2009 -0400
@@ -0,0 +1,103 @@
+package ca.sebastiendionne.gallery.model;
+
+public class MediaFile {
+       
+       private String name = null;
+       private String path = null;
+       private String duration = null;
+       private String codec = null;
+       private String streamSize = null;
+       private boolean hasAlbumCover = false;
+       private String albumCoverPath = null;
+       
+       private int albumCoverMaxHeight;
+       private int albumCoverMaxWidth;
+       
+       public String getName() {
+               return name;
+       }
+
+       public void setName(String name) {
+               this.name = name;
+       }
+
+       public String getDuration() {
+               return duration;
+       }
+
+       public void setDuration(String duration) {
+               this.duration = duration;
+       }
+
+       public String getCodec() {
+               return codec;
+       }
+
+       public void setCodec(String codec) {
+               this.codec = codec;
+       }
+
+       public String getStreamSize() {
+               return streamSize;
+       }
+
+       public void setStreamSize(String streamSize) {
+               this.streamSize = streamSize;
+       }
+
+       public boolean isHasAlbumCover() {
+               return hasAlbumCover;
+       }
+
+       public void setHasAlbumCover(boolean hasAlbumCover) {
+               this.hasAlbumCover = hasAlbumCover;
+       }
+
+       public String getAlbumCoverPath() {
+               return albumCoverPath;
+       }
+
+       public void setAlbumCoverPath(String albumCoverPath) {
+               this.albumCoverPath = albumCoverPath;
+       }
+
+       public int getAlbumCoverMaxHeight() {
+               return albumCoverMaxHeight;
+       }
+
+       public void setAlbumCoverMaxHeight(int albumCoverMaxHeight) {
+               this.albumCoverMaxHeight = albumCoverMaxHeight;
+       }
+
+       public int getAlbumCoverMaxWidth() {
+               return albumCoverMaxWidth;
+       }
+
+       public void setAlbumCoverMaxWidth(int albumCoverMaxWidth) {
+               this.albumCoverMaxWidth = albumCoverMaxWidth;
+       }
+
+       public String getPath() {
+               return path;
+       }
+
+       public void setPath(String path) {
+               this.path = path;
+       }
+
+       public String toString(){
+               StringBuffer sb = new StringBuffer();
+               
+               sb.append("name=" + name).append("  ");
+               sb.append("path=" + path).append("  ");
+               sb.append("duration=" + duration).append("  ");
+               sb.append("codec=" + codec).append("  ");
+               sb.append("streamSize=" + streamSize).append("  ");
+               sb.append("hasAlbumCover=" + hasAlbumCover).append(" 
");
+               sb.append("albumCoverPath=" + albumCoverPath).append(" 
");
+               sb.append("albumCoverMaxWidth=" +
albumCoverMaxWidth).append("  ");
+               sb.append("albumCoverMaxHeight=" +
albumCoverMaxHeight).append("  ");
+               
+               return sb.toString();
+       }
+}
diff -r 8d5d1bf1d912 -r df6e910ed56a
grizzly-related/FreeMarkerOnGrizzly/src/ca/sebastiendionne/grizzly/Free
MarkerServlerLauncher.java
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++
b/grizzly-related/FreeMarkerOnGrizzly/src/ca/sebastiendionne/grizzly/Fr
eeMarkerServlerLauncher.java Sun Mar 29 21:11:36 2009 -0400
@@ -0,0 +1,28 @@
+package ca.sebastiendionne.grizzly;
+
+import com.sun.grizzly.http.servlet.deployer.GrizzlyWebServerDeployer;
+
+public class FreeMarkerServlerLauncher {
+
+       /**
+        * @param args
+        */
+       public static void main(String[] args) {
+               GrizzlyWebServerDeployer gws = new
GrizzlyWebServerDeployer();
+
+               try {
+                       
+                       args = new String[]{"-a","./web.xml"};
+                       //args = new
String[]{"-a","C:/jetty-7.0.0.pre5/webapps/test2"};
+                       
+                       // ready to launch
+                       gws.init(args);
+                       gws.launch(); 
+            
+        } catch (Exception e){
+               e.printStackTrace();
+        }
+               
+       }
+
+}
diff -r 8d5d1bf1d912 -r df6e910ed56a
grizzly-related/FreeMarkerOnGrizzly/src/ca/sebastiendionne/grizzly/Gall
eryFreemarkerServlet.java
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++
b/grizzly-related/FreeMarkerOnGrizzly/src/ca/sebastiendionne/grizzly/Ga
lleryFreemarkerServlet.java  Sun Mar 29 21:11:36 2009 -0400
@@ -0,0 +1,102 @@
+package ca.sebastiendionne.grizzly;
+
+import java.io.File;
+import java.io.FilenameFilter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import ca.sebastiendionne.gallery.Mp3InfoExtractor;
+import ca.sebastiendionne.gallery.model.MediaFile;
+import freemarker.ext.servlet.FreemarkerServlet;
+import freemarker.template.Template;
+import freemarker.template.TemplateModel;
+
+public class GalleryFreemarkerServlet extends FreemarkerServlet {
+
+       private static final long serialVersionUID =
-6725124432704326547L;
+
+       private String libraryPath = null;
+       private String tempFolder = null;
+       
+       
+       @Override
+       public void init() throws ServletException {
+               try {
+                       super.init();
+               } catch (ServletException e) {
+                       
+                       //We did a hack to allow us to pass additional
params to the FreemarkerServlet
+                       if(e.getMessage()!=null &&
(e.getMessage().indexOf("libraryPath")>0 ||
e.getMessage().indexOf("tempFolder")>0)){
+                               libraryPath =
getServletConfig().getInitParameter("libraryPath");
+                               tempFolder =
getServletConfig().getInitParameter("tempFolder");
+                       } else {
+                               throw e;
+                       }
+                       
+                       
+                       
+               }
+       }
+
+       @Override
+       protected boolean preprocessRequest(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
+               return super.preprocessRequest(request, response);
+       }
+
+       @Override
+       protected boolean preTemplateProcess(HttpServletRequest
request, HttpServletResponse response, Template template, TemplateModel
data) throws ServletException, IOException {
+               
+               // add data to the template
+               List<MediaFile> mediaFileList = new
ArrayList<MediaFile>();
+
+               if(libraryPath!=null){
+                       File folder = new File(libraryPath);
+                       
+                       if(folder.exists() && folder.isDirectory()){
+                               File[] files = folder.listFiles(new
FilenameFilter(){
+                    public boolean accept(File dir, String name) {
+                        if (name.endsWith(".mp3")){
+                            return true;
+                        } else {
+                            return false;
+                        }
+                        
+                    }
+                });
+                               
+                               // we extract the info of the mp3 and
save the album cover from the mp3 to temp folder
+                               for (int i = 0; i < files.length; i++)
{
+                                       
+                                       //String filename =
folder.getPath().replaceAll("\\\\", "/") + "/" + files[i];
+                                       String filename =
files[i].getAbsolutePath();
+                                       
+                                       MediaFile mediaFile = null;
+                                       try {
+                                               mediaFile =
Mp3InfoExtractor.extractInfo(filename, tempFolder);
+                                              
mediaFileList.add(mediaFile);
+                                               
+                                       } catch (Exception e) {
+                                               e.printStackTrace();
+                                       }
+                                       
+                                       
+                               }
+                       }
+               }
+               
+               System.out.println("List size = " +
mediaFileList.size());
+               request.setAttribute("list", mediaFileList);
+               
+               
+               return true;
+       }
+
+       
+       
+       
+}
diff -r 8d5d1bf1d912 -r df6e910ed56a
grizzly-related/FreeMarkerOnGrizzly/test/test/FreeMarkerServletTest.jav
a
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++
b/grizzly-related/FreeMarkerOnGrizzly/test/test/FreeMarkerServletTest.j
ava  Sun Mar 29 21:11:36 2009 -0400
@@ -0,0 +1,33 @@
+package test;
+
+import javax.servlet.Servlet;
+
+import com.sun.grizzly.http.embed.GrizzlyWebServer;
+import com.sun.grizzly.http.servlet.ServletAdapter;
+import com.sun.grizzly.util.ClassLoaderUtil;
+
+public class FreeMarkerServletTest {
+
+       /**
+        * @param args
+        */
+       public static void main(String[] args) {
+               GrizzlyWebServer ws = new GrizzlyWebServer(80);
+               
+               try {
+                       
+            ServletAdapter sa = new ServletAdapter();
+           // sa.setContextPath("/");
+            
+            Servlet servlet =
(Servlet)ClassLoaderUtil.load("test.HelloServlet");
+            sa.setContextPath("/*.ftl");
+           sa.setServletInstance(servlet);
+            
+           ws.addGrizzlyAdapter(sa, new String[]{});
+            ws.start();
+               } catch(Exception e){
+                       e.printStackTrace();
+               }
+       }
+
+}
diff -r 8d5d1bf1d912 -r df6e910ed56a
grizzly-related/FreeMarkerOnGrizzly/test/test/HelloServlet.java
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/grizzly-related/FreeMarkerOnGrizzly/test/test/HelloServlet.java  
Sun Mar 29 21:11:36 2009 -0400
@@ -0,0 +1,32 @@
+package test;
+
+import java.io.*;
+
+import javax.servlet.http.*;
+import javax.servlet.*;
+
+/**
+ * Hello world servlet.  Most servlets will extend
+ * javax.servlet.http.HttpServlet as this one does.
+ */
+public class HelloServlet extends HttpServlet {
+  /**
+   * Implements the HTTP GET method.  The GET method is the standard
+   * browser method.
+   *
+   * @param request the request object, containing data from the
browser
+   * @param repsonse the response object to send data to the browser
+   */
+  public void doGet (HttpServletRequest request,
+                     HttpServletResponse response)
+    throws ServletException, IOException
+  {
+       
+    // Returns a writer to write to the browser
+    PrintWriter out = response.getWriter();
+
+    // Writes the string to the browser.
+    out.println("Hello, world!");
+    out.close();
+  }
+}
diff -r 8d5d1bf1d912 -r df6e910ed56a
grizzly-related/FreeMarkerOnGrizzly/test/test/MP3ExtractorTest.java
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++
b/grizzly-related/FreeMarkerOnGrizzly/test/test/MP3ExtractorTest.java  
    Sun Mar 29 21:11:36 2009 -0400
@@ -0,0 +1,126 @@
+package test;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.util.List;
+
+import org.jaudiotagger.audio.AudioFileIO;
+import org.jaudiotagger.audio.mp3.MP3AudioHeader;
+import org.jaudiotagger.audio.mp3.MP3File;
+import org.jaudiotagger.tag.Tag;
+import org.jaudiotagger.tag.TagField;
+import org.jaudiotagger.tag.TagFieldKey;
+import org.jaudiotagger.tag.datatype.DataTypes;
+import org.jaudiotagger.tag.id3.AbstractID3v2Frame;
+import org.jaudiotagger.tag.id3.ID3v24Frames;
+import org.jaudiotagger.tag.id3.framebody.FrameBodyAPIC;
+import org.junit.Test;
+
+
+public class MP3ExtractorTest {
+
+       
+       @Test
+       public void mp3infoTest() throws Exception{
+               MP3File f = (MP3File)AudioFileIO.read(new
File("D:\\DVD\\Metro Station\\01 Seventeen Forever.mp3"));
+               
+               Tag tag = f.getTag();
+
+               MP3AudioHeader mp3AudioHeader = f.getMP3AudioHeader();
+               System.out.println(mp3AudioHeader.getTrackLength());
+              
System.out.println(mp3AudioHeader.getSampleRateAsNumber());
+               System.out.println(mp3AudioHeader.getChannels());
+               System.out.println(mp3AudioHeader.isVariableBitRate());
+               
+              
System.out.println(mp3AudioHeader.getTrackLengthAsString());
+               System.out.println(mp3AudioHeader.getMpegVersion());
+               System.out.println(mp3AudioHeader.getMpegLayer());
+               System.out.println(mp3AudioHeader.isOriginal());
+               System.out.println(mp3AudioHeader.isCopyrighted());
+               System.out.println(mp3AudioHeader.isPrivate());
+               System.out.println(mp3AudioHeader.isProtected());
+               System.out.println(mp3AudioHeader.getBitRate());
+               System.out.println(mp3AudioHeader.getEncodingType());
+               System.out.println(mp3AudioHeader.getEncoder());
+               
+               System.out.println("FRAME_ID_ARTIST=" +
tag.getFirst(ID3v24Frames.FRAME_ID_ARTIST));
+               System.out.println("FRAME_ID_ALBUM=" +
tag.getFirst(ID3v24Frames.FRAME_ID_ALBUM));
+               System.out.println("FRAME_ID_YEAR=" +
tag.getFirst(ID3v24Frames.FRAME_ID_YEAR));
+               
+               
+               System.out.println(tag.getFirstArtist());
+               System.out.println(tag.getFirstAlbum());
+               System.out.println(tag.getFirstTitle());
+               System.out.println(tag.getFirstComment());
+               System.out.println(tag.getFirstYear());
+               System.out.println(tag.getFirstTrack());
+               
+               
+              
System.out.println(tag.getFirst(ID3v24Frames.FRAME_ID_ARTIST) + " - " +
tag.getFirst(ID3v24Frames.FRAME_ID_TITLE));
+
+               List<TagField> albumCoverList =
f.getTag().get(TagFieldKey.COVER_ART);
+               
+               if(albumCoverList.size()>0){
+                       TagField imageField = albumCoverList.get(0);
+                       
+                       String tempFolder = "c:/temp/album_cover";
+                       
+                       File tempFolderFile = new File(tempFolder);
+                       
+                       if(!tempFolderFile.exists()){
+                               System.out.println("creating temp
folder for Album covers");
+                               tempFolderFile.mkdirs();
+                       }
+                       
+                       if(tempFolderFile.exists() &&
tempFolderFile.isDirectory()){
+                               
+                               String filename = tempFolderFile +
File.separator + f.getFile().getName();
+                       
+                       int indexExtention = filename.lastIndexOf(".");
+                       
+                       if(indexExtention>0){
+                               filename =
filename.substring(0,indexExtention);
+                       }
+                       
+                       // ajoute l'extension .jpg
+                       filename = filename + ".jpg";
+                       
+                               // si le fichier existe deja on le skip
+                               File albumCover = new File(filename);
+                               if(albumCover.exists()){
+                                       return;
+                               }
+                               
+                               if(imageField instanceof
AbstractID3v2Frame)
+                               {
+                                   FrameBodyAPIC imageFrameBody =
(FrameBodyAPIC)((AbstractID3v2Frame)imageField).getBody();
+                                   if(!imageFrameBody.isImageUrl())
+                                   {
+                                       byte[] imageRawData =
(byte[])imageFrameBody.getObjectValue(DataTypes.OBJ_PICTURE_DATA);
+                                       
+                                       if(imageRawData!=null){
+                                               System.out.println("buf
size= " + imageRawData.length);
+                                               
+                                               
+                                               ByteArrayOutputStream
baos = new ByteArrayOutputStream();
+                                              
baos.write(imageRawData);
+                                               
+                                              
System.out.println("album saved to : " + filename);
+                                               
+                                               FileOutputStream fos =
new FileOutputStream(filename);
+                                               
+                                               baos.writeTo(fos);
+                                               
+                                               fos.close();
+                                               
+                                       }
+                                   }
+                               }
+       
+                       }
+               }
+               
+                               
+       }
+}
diff -r 8d5d1bf1d912 -r df6e910ed56a
grizzly-related/FreeMarkerOnGrizzly/test/test/SampleFreeMarker.java
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++
b/grizzly-related/FreeMarkerOnGrizzly/test/test/SampleFreeMarker.java  
    Sun Mar 29 21:11:36 2009 -0400
@@ -0,0 +1,80 @@
+package test;
+
+import java.io.OutputStreamWriter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import ca.sebastiendionne.gallery.model.MediaFile;
+import freemarker.template.Configuration;
+import freemarker.template.ObjectWrapper;
+import freemarker.template.Template;
+
+public class SampleFreeMarker {
+
+       private static final Logger s_logger =
LoggerFactory.getLogger(SampleFreeMarker.class);
+
+       private List<MediaFile> mediaFileList = null;
+
+       public void init() {
+
+               mediaFileList = new ArrayList<MediaFile>();
+
+               for (int i = 0; i < 5; i++) {
+                       MediaFile mediaFile = new MediaFile();
+                       mediaFile.setName("name" + i);
+                       mediaFile.setDuration("12:45");
+                       mediaFile.setCodec("H264");
+                       mediaFile.setAlbumCoverMaxHeight(50);
+                       mediaFile.setAlbumCoverMaxWidth(50);
+                       mediaFile.setStreamSize("2 Megs");
+
+                       mediaFileList.add(mediaFile);
+               }
+
+       }
+
+       public void generate() {
+
+               try {
+                       Configuration cfg = new Configuration();
+                       
+                      
cfg.setObjectWrapper(ObjectWrapper.BEANS_WRAPPER);
+
+                       Template tpl = cfg.getTemplate("./index.ftl");
+                       OutputStreamWriter output = new
OutputStreamWriter(System.out);
+                       
+                       Map root = new HashMap();
+                       
+                       root.put("list", mediaFileList);
+                       
+                       tpl.process(root, output);
+                       
+               } catch (Exception e) {
+                       s_logger.error("generate", e);
+               }
+
+       }
+
+       /**
+        * @param args
+        */
+       public static void main(String[] args) {
+               SampleFreeMarker a = new SampleFreeMarker();
+
+               try {
+
+                       a.init();
+                       a.generate();
+
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }
+
+       }
+
+}
diff -r 8d5d1bf1d912 -r df6e910ed56a
grizzly-related/FreeMarkerOnGrizzly/web.xml
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/grizzly-related/FreeMarkerOnGrizzly/web.xml       Sun Mar 29
21:11:36 2009 -0400
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app xmlns="http://java.sun.com/xml/ns/j2ee";
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd";
+         version="2.4">
+  <display-name>FreeMarker</display-name>
+  <description>FreeMarker on Grizzly demo</description>
+  
+       <servlet>
+         <servlet-name>freemarker</servlet-name>
+        
<servlet-class>ca.sebastiendionne.grizzly.GalleryFreemarkerServlet</ser
vlet-class>
+           
+         <!-- FreemarkerServlet settings: -->
+         <init-param>
+           <param-name>TemplatePath</param-name>
+           <param-value>/</param-value>
+         </init-param>
+         <init-param>
+           <param-name>NoCache</param-name>
+           <param-value>true</param-value>
+         </init-param>
+         <init-param>
+           <param-name>Debug</param-name>
+           <param-value>true</param-value>
+         </init-param>
+         <init-param>
+           <param-name>ContentType</param-name>
+           <param-value>text/html</param-value>
+         </init-param>
+           
+         <!-- FreeMarker settings: -->
+         <init-param>
+           <param-name>template_update_delay</param-name>
+           <param-value>0</param-value> <!-- 0 is for development
only! Use higher value otherwise. -->
+         </init-param>
+         <init-param>
+           <param-name>default_encoding</param-name>
+           <param-value>ISO-8859-1</param-value>
+         </init-param>
+         <init-param>
+           <param-name>number_format</param-name>
+           <param-value>0.##########</param-value>
+         </init-param>
+         
+         <!--  Gallery Settings -->
+         <init-param>
+           <param-name>libraryPath</param-name>
+          
<param-value>C:/sources/sebastiendionne/grizzly-related/FreeMarkerOnGri
zzly/resources</param-value>
+         </init-param>
+         <init-param>
+           <param-name>tempFolder</param-name>
+           <param-value>/temp/album_cover</param-value>
+         </init-param>
+         <load-on-startup>1</load-on-startup>
+       </servlet>
+       
+       <servlet-mapping>
+         <servlet-name>freemarker</servlet-name>
+         <url-pattern>*.ftl</url-pattern>
+       </servlet-mapping> 
+
+</web-app>
\ No newline at end of file


[repository:6] First draft of FreeMarkerOnGrizzly.

survivant00 03/30/2009
  • Mysql
  • Glassfish
  • Jruby
  • Rails
  • Nblogo
Terms of Use; Privacy Policy;
© 2010, Oracle Corporation and/or its affiliates
(revision 20120518.3c65429)
 
 
Close
loading
Please Confirm
Close