[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> </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 |





