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