Author: tdraier
Date: Thu Jul 12 21:04:01 2007
New Revision: 17990

URL: https://svndev.jahia.net/websvn/listing.php?sc=3D1&rev=3D17990&repname=
=3Djahia
Log:
thumbnails support

Added:
    trunk/core/src/java/org/jahia/services/content/JahiaResourceLocator.java
    trunk/core/src/java/org/jahia/services/content/ThumbnailHandler.java
Modified:
    trunk/core/src/java/org/jahia/bin/JahiaWebdavServlet.java
    trunk/core/src/java/org/jahia/services/content/JahiaIOManager.java
    trunk/core/src/java/org/jahia/taglibs/mediagallery/MediaThumbTag.java
    trunk/core/src/java/org/jahia/tools/imageprocess/ImageProcess.java

Modified: trunk/core/src/java/org/jahia/bin/JahiaWebdavServlet.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/java/o=
rg/jahia/bin/JahiaWebdavServlet.java&rev=3D17990&repname=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/core/src/java/org/jahia/bin/JahiaWebdavServlet.java (original)
+++ trunk/core/src/java/org/jahia/bin/JahiaWebdavServlet.java Thu Jul 12 21=
:04:01 2007
@@ -4,17 +4,13 @@
 import org.apache.jackrabbit.server.SessionProvider;
 import org.apache.jackrabbit.server.SessionProviderImpl;
 import org.apache.jackrabbit.server.BasicCredentialsProvider;
-import org.apache.jackrabbit.server.CredentialsProvider;
 import org.apache.jackrabbit.webdav.*;
-import org.apache.jackrabbit.webdav.jcr.JcrDavSession;
-import org.apache.jackrabbit.webdav.jcr.ItemResourceConstants;
 import org.apache.jackrabbit.webdav.simple.LocatorFactoryImplEx;
-import org.apache.jackrabbit.util.Text;
 import org.jahia.params.JahiaLoginModule;
 import org.jahia.params.ProcessingContext;
 import org.jahia.services.usermanager.JahiaUser;
-import org.jahia.services.usermanager.JahiaUserManagerService;
 import org.jahia.services.sites.JahiaSite;
+import org.jahia.services.content.JahiaResourceLocator;
 import org.jahia.registries.ServicesRegistry;
 import org.jahia.exceptions.JahiaException;
 =

@@ -40,6 +36,11 @@
             locatorFactory =3D new LocatorFactoryImplEx(getPathPrefix()) {
                 public DavResourceLocator createResourceLocator(String pre=
fix, String href) {
                     DavResourceLocator d =3D  super.createResourceLocator(=
prefix, href);
+                    boolean thumb =3D false;
+                    if (d.getWorkspacePath().equals("/thumbnail")) {
+                        d =3D super.createResourceLocator(prefix, "/defaul=
t", d.getRepositoryPath(), false);
+                        thumb =3D true;
+                    }
                     String path =3D d.getRepositoryPath();
                     if (path !=3D null && path.length() > 1) {
                         path =3D path.substring(1);
@@ -49,7 +50,9 @@
                         try {
                             JahiaSite site =3D ServicesRegistry.getInstanc=
e().getJahiaSitesService().getSiteByKey(path);
                             if (site !=3D null) {
-                                return new JahiaResourceLocator(d,site);
+                                JahiaResourceLocator locator =3D new Jahia=
ResourceLocator(d, site);
+                                locator.setThumbnail(thumb);
+                                return locator;
                             }
                         } catch (JahiaException e) {
 =

@@ -101,58 +104,4 @@
         return super.execute(request, response, method, resource);
     }
 =

-
-    class JahiaResourceLocator implements DavResourceLocator {
-        private DavResourceLocator d;
-        private JahiaSite site;
-
-        public JahiaResourceLocator(DavResourceLocator d, JahiaSite site) {
-            this.d =3D d;
-            this.site =3D site;
-        }
-
-        public String getPrefix() {
-            return d.getPrefix();
-        }
-
-        public String getResourcePath() {
-            return d.getResourcePath();
-        }
-
-        public String getWorkspacePath() {
-            return d.getWorkspacePath();
-        }
-
-        public String getWorkspaceName() {
-            return d.getWorkspaceName();
-        }
-
-        public boolean isSameWorkspace(DavResourceLocator locator) {
-            return d.isSameWorkspace(locator);
-        }
-
-        public boolean isSameWorkspace(String workspaceName) {
-            return d.isSameWorkspace(workspaceName);
-        }
-
-        public String getHref(boolean isCollection) {
-            return d.getHref(isCollection);
-        }
-
-        public boolean isRootLocation() {
-            return d.isRootLocation();
-        }
-
-        public DavLocatorFactory getFactory() {
-            return d.getFactory();
-        }
-
-        public String getRepositoryPath() {
-            return d.getRepositoryPath();
-        }
-
-        public JahiaSite getSite() {
-            return site;
-        }
-    }
 }
\ No newline at end of file

Modified: trunk/core/src/java/org/jahia/services/content/JahiaIOManager.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/java/o=
rg/jahia/services/content/JahiaIOManager.java&rev=3D17990&repname=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/core/src/java/org/jahia/services/content/JahiaIOManager.java (ori=
ginal)
+++ trunk/core/src/java/org/jahia/services/content/JahiaIOManager.java Thu =
Jul 12 21:04:01 2007
@@ -59,6 +59,7 @@
      */
     protected void init() {
         addIOHandler(new DirListingExportHandler(this));
+        addIOHandler(new ThumbnailHandler(this));
         addIOHandler(new DefaultHandler(this, Constants.JAHIANT_FOLDER, Co=
nstants.JAHIANT_FILE, JcrConstants.NT_RESOURCE));
     }
 }
\ No newline at end of file

Added: trunk/core/src/java/org/jahia/services/content/JahiaResourceLocator.=
java
URL: https://svndev.jahia.net/websvn/filedetails.php?path=3D/trunk/core/src=
/java/org/jahia/services/content/JahiaResourceLocator.java&rev=3D17990&repn=
ame=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/core/src/java/org/jahia/services/content/JahiaResourceLocator.jav=
a (added)
+++ trunk/core/src/java/org/jahia/services/content/JahiaResourceLocator.jav=
a Thu Jul 12 21:04:01 2007
@@ -0,0 +1,75 @@
+package org.jahia.services.content;
+
+import org.apache.jackrabbit.webdav.DavResourceLocator;
+import org.apache.jackrabbit.webdav.DavLocatorFactory;
+import org.jahia.services.sites.JahiaSite;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: toto
+ * Date: 12 juil. 2007
+ * Time: 20:41:36
+ * To change this template use File | Settings | File Templates.
+ */
+public class JahiaResourceLocator implements DavResourceLocator {
+    private DavResourceLocator d;
+    private JahiaSite site;
+    private boolean thumbnail =3D false;
+
+    public JahiaResourceLocator(DavResourceLocator d, JahiaSite site) {
+        this.d =3D d;
+        this.site =3D site;
+    }
+
+    public String getPrefix() {
+        return d.getPrefix();
+    }
+
+    public String getResourcePath() {
+        return d.getResourcePath();
+    }
+
+    public String getWorkspacePath() {
+        return d.getWorkspacePath();
+    }
+
+    public String getWorkspaceName() {
+        return d.getWorkspaceName();
+    }
+
+    public boolean isSameWorkspace(DavResourceLocator locator) {
+        return d.isSameWorkspace(locator);
+    }
+
+    public boolean isSameWorkspace(String workspaceName) {
+        return d.isSameWorkspace(workspaceName);
+    }
+
+    public String getHref(boolean isCollection) {
+        return d.getHref(isCollection);
+    }
+
+    public boolean isRootLocation() {
+        return d.isRootLocation();
+    }
+
+    public DavLocatorFactory getFactory() {
+        return d.getFactory();
+    }
+
+    public String getRepositoryPath() {
+        return d.getRepositoryPath();
+    }
+
+    public JahiaSite getSite() {
+        return site;
+    }
+
+    public boolean isThumbnail() {
+        return thumbnail;
+    }
+
+    public void setThumbnail(boolean thumbnail) {
+        this.thumbnail =3D thumbnail;
+    }
+}

Added: trunk/core/src/java/org/jahia/services/content/ThumbnailHandler.java
URL: https://svndev.jahia.net/websvn/filedetails.php?path=3D/trunk/core/src=
/java/org/jahia/services/content/ThumbnailHandler.java&rev=3D17990&repname=
=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/core/src/java/org/jahia/services/content/ThumbnailHandler.java (a=
dded)
+++ trunk/core/src/java/org/jahia/services/content/ThumbnailHandler.java Th=
u Jul 12 21:04:01 2007
@@ -0,0 +1,179 @@
+package org.jahia.services.content;
+
+import org.jahia.services.sites.JahiaSite;
+import org.jahia.bin.JahiaWebdavServlet;
+import org.jahia.bin.Jahia;
+import org.jahia.utils.zip.ZipInputStream;
+import org.jahia.utils.zip.ZipEntry;
+import org.jahia.utils.zip.ZipOutputStream;
+import org.jahia.tools.imageprocess.ImageProcess;
+import org.apache.jackrabbit.webdav.jcr.JcrDavSession;
+import org.apache.jackrabbit.webdav.DavResource;
+import org.apache.jackrabbit.JcrConstants;
+import org.apache.jackrabbit.server.io.*;
+
+import javax.jcr.Node;
+import javax.jcr.Session;
+import javax.jcr.PathNotFoundException;
+import javax.jcr.RepositoryException;
+import java.io.*;
+import java.util.GregorianCalendar;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: toto
+ * Date: 12 juil. 2007
+ * Time: 20:38:16
+ * To change this template use File | Settings | File Templates.
+ */
+public class ThumbnailHandler extends DefaultHandler implements IOHandler {
+
+    public ThumbnailHandler(IOManager ioManager) {
+        super(ioManager);
+    }
+
+    public boolean canImport(ImportContext context, boolean isCollection) {
+        return false;
+    }
+
+    public boolean canImport(ImportContext context, DavResource resource) {
+        return false;
+    }
+
+    public boolean canExport(ExportContext context, boolean isCollection) {
+        return false;
+    }
+
+    public boolean canExport(ExportContext context, DavResource resource) {
+        return (resource.getLocator() instanceof JahiaResourceLocator && (=
(JahiaResourceLocator)resource.getLocator()).isThumbnail());
+    }
+
+    public boolean exportContent(ExportContext context, DavResource resour=
ce) throws IOException {
+        try {
+            Session session =3D ((JcrDavSession)resource.getSession()).get=
RepositorySession();
+            String path =3D resource.getLocator().getRepositoryPath().subs=
tring(1);
+            Node objectNode =3D session.getRootNode().getNode(path);
+            JahiaSite site =3D ((JahiaResourceLocator)resource.getLocator(=
)).getSite();
+            InputStream is =3D getThumb(objectNode, session, site, true);
+            if (is !=3D null) {
+                OutputStream os =3D context.getOutputStream();
+                int r=3D0;
+                byte[] buf =3D new byte[4096];
+                while ((r=3Dis.read(buf))>0) {
+                    os.write(buf, 0, r);
+                }
+                return true;
+            }
+        } catch (RepositoryException e) {
+            e.printStackTrace();
+        }
+        return false;
+    }
+
+    public InputStream getThumb(Node objectNode, Session session, JahiaSit=
e site, boolean create) {
+        try {
+            Node content =3D objectNode.getNode(JcrConstants.JCR_CONTENT);
+            String type =3D content.getProperty(JcrConstants.JCR_MIMETYPE)=
.getString();
+
+            if (type.startsWith("image")) {
+                String thumbsPath =3D site.getSiteKey() + "/users/" + sess=
ion.getUserID() + "/private";
+                Node thumbsContentNode =3D null;
+                InputStream inputStream =3D null;
+                String thumbsName =3D "thumbs.zip";
+                try {
+                    thumbsContentNode =3D session.getRootNode().getNode(th=
umbsPath+"/"+ thumbsName +"/"+JcrConstants.JCR_CONTENT);
+                    inputStream =3D thumbsContentNode.getProperty(JcrConst=
ants.JCR_DATA).getStream();
+                } catch (PathNotFoundException e) {
+                    if (create) {
+                        Node home =3D session.getRootNode().getNode(thumbs=
Path);
+                        Node thNode =3D home.addNode(thumbsName, Constants=
.JAHIANT_FILE);
+                        thumbsContentNode =3D thNode.addNode(JcrConstants.=
JCR_CONTENT, JcrConstants.NT_RESOURCE);
+                        thumbsContentNode.setProperty(JcrConstants.JCR_MIM=
ETYPE, "application/zip");
+                    }
+                }
+
+                final String myName =3D objectNode.getPath().substring(1);
+
+                final Node fContentNode =3D inputStream !=3D null ? thumbs=
ContentNode : null;
+
+                if (inputStream !=3D null) {
+                    ZipInputStream zis =3D new ZipInputStream(inputStream);
+                    ZipEntry zipentry;
+                    while ((zipentry =3D zis.getNextEntry()) !=3D null) {
+                        String filename =3D zipentry.getName();
+                        if (filename.equals(myName) && content.getProperty=
(JcrConstants.JCR_LASTMODIFIED).getDate().getTime().getTime() < zipentry.ge=
tTime()) {
+                            return zis;
+                        }
+                    }
+                }
+
+                if (!create) {
+                    return null;
+                }
+
+                String savePath =3D Jahia.getSettings().getTmpContentDiskP=
ath();
+                File Ftemp =3D new File(savePath);
+                if (!Ftemp.exists()) Ftemp.mkdir();
+                final File f =3D File.createTempFile("thumb","jpg", Ftemp);
+                ImageProcess ip =3D new ImageProcess();
+                ip.createThumb(content.getProperty(JcrConstants.JCR_DATA).=
getStream(), f, 72);
+                f.deleteOnExit();
+
+                PipedInputStream pis =3D new PipedInputStream();
+                final PipedOutputStream pos =3D new PipedOutputStream(pis);
+                Thread t =3D new Thread() {
+                    public void run() {
+                        try {
+                            ZipOutputStream zos =3D new ZipOutputStream(po=
s);
+                            byte[] buffer =3D new byte[4096];
+                            int r;
+                            if (fContentNode !=3D null) {
+                                ZipInputStream zis =3D new ZipInputStream(=
fContentNode.getProperty(JcrConstants.JCR_DATA).getStream());
+                                ZipEntry zipentry;
+                                while ((zipentry =3D zis.getNextEntry()) !=
=3D null) {
+                                    String filename =3D zipentry.getName();
+                                    if (!filename.equals(myName)) {
+                                        zos.putNextEntry(new ZipEntry(file=
name));
+                                        while ((r=3Dzis.read(buffer))>0) {
+                                            zos.write(buffer,0,r);
+                                        }
+                                    }
+                                    zis.closeEntry();
+                                }
+                            }
+                            zos.putNextEntry(new ZipEntry(myName));
+
+                            InputStream thumbnail =3D new FileInputStream(=
f);
+
+                            while ((r=3Dthumbnail.read(buffer))>0) {
+                                zos.write(buffer,0,r);
+                            }
+                            zos.closeEntry();
+                            zos.close();
+                        } catch (IOException e) {
+                            e.printStackTrace();  //To change body of catc=
h statement use File | Settings | File Templates.
+                        } catch (RepositoryException re) {
+                            re.printStackTrace();  //To change body of cat=
ch statement use File | Settings | File Templates.
+                        }
+                    }
+                };
+                t.start();
+                thumbsContentNode.setProperty(JcrConstants.JCR_DATA,pis);
+                t.join();
+
+                thumbsContentNode.setProperty(JcrConstants.JCR_LASTMODIFIE=
D, new GregorianCalendar());
+                session.save();
+                return new FileInputStream(f);
+            }
+        } catch (RepositoryException e) {
+            e.printStackTrace();  //To change body of catch statement use =
File | Settings | File Templates.
+        } catch (IOException e) {
+            e.printStackTrace();  //To change body of catch statement use =
File | Settings | File Templates.
+        } catch (InterruptedException e) {
+            e.printStackTrace();  //To change body of catch statement use =
File | Settings | File Templates.
+        }
+
+        return null;
+    }
+
+}

Modified: trunk/core/src/java/org/jahia/taglibs/mediagallery/MediaThumbTag.=
java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/java/o=
rg/jahia/taglibs/mediagallery/MediaThumbTag.java&rev=3D17990&repname=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/core/src/java/org/jahia/taglibs/mediagallery/MediaThumbTag.java (=
original)
+++ trunk/core/src/java/org/jahia/taglibs/mediagallery/MediaThumbTag.java T=
hu Jul 12 21:04:01 2007
@@ -368,7 +368,7 @@
         if (!Ftemp.exists()) Ftemp.mkdir();
         File f =3D File.createTempFile(thumbname, "." + ext, Ftemp);
         logger.debug("creating thumb " + thumbname + " with extension " + =
ext + " with new width:" + newwidth + " in file:" + f.getName());
-        processor.createThumb(source.downloadFile(), ext, f, newwidth, fQu=
al);
+        processor.createThumb(source.downloadFile(), f, newwidth);
         logger.debug("uploading thumb " + thumbname + " mediatype: " + mty=
pe);
         DAVFileAccess parentdir =3D getParentDir(jParams, source);
         if (parentdir.beginTransaction()) {

Modified: trunk/core/src/java/org/jahia/tools/imageprocess/ImageProcess.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/java/o=
rg/jahia/tools/imageprocess/ImageProcess.java&rev=3D17990&repname=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/core/src/java/org/jahia/tools/imageprocess/ImageProcess.java (ori=
ginal)
+++ trunk/core/src/java/org/jahia/tools/imageprocess/ImageProcess.java Thu =
Jul 12 21:04:01 2007
@@ -49,8 +49,7 @@
      * Creates a JPEG thumbnail from inputFile and saves it to disk in
      * outputFile. scaleWidth is the width to scale the image to
      */
-    public boolean createThumb(InputStream istream , String ext, File outp=
utFile, int size,
-                               float fQual) throws IOException {
+    public boolean createThumb(InputStream istream, File outputFile, int s=
ize) throws IOException {
 =

         File parDir =3D outputFile.getParentFile();
         if (!parDir.exists())
@@ -59,7 +58,7 @@
 =

         // Load the input image.
 =

-        File tmp =3D File.createTempFile("image","."+ext);
+        File tmp =3D File.createTempFile("image","tmp");
         FileUtils.getInstance().copyStream(istream, new FileOutputStream(t=
mp));
         Opener op =3D new Opener();
         ImagePlus ip =3D op.openImage(tmp.getPath());

_______________________________________________
cvs_list mailing list
[email protected]
http://lists.jahia.org/cgi-bin/mailman/listinfo/cvs_list

Reply via email to