[xwiki-commits] r934 - in xwiki/trunk/src/main: java/com/xpn/xwiki/plugin java/com/xpn/xwiki/plugin/image java/com/xpn/xwiki/web web/WEB-INF
jeremi joslin
jeremi23 at gmail.com
Thu Feb 16 02:36:02 CET 2006
Hi,
Thanks, it's sound great. It will be very usefull.
can you just rename
public XWikiAttachment downloadAttachment(XWikiAttachment image,
XWikiContext context)
to
public XWikiAttachment downloadAttachment(XWikiAttachment attachment,
XWikiContext context)
in
xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/XWikiDefaultPlugin.java
xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/XWikiPluginInterface.java
xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/XWikiPluginManager.java
Can you add a little explanation about your plugin in :
http://www.xwiki.org/xwiki/bin/view/DevGuide/Plugins+List
and send an email to the dev list to tell others you create this plugin.
thank you
Jérémi
On 2/16/06, Xavier MOGHRABI <moghrabix at users.forge.objectweb.org> wrote:
> Author: moghrabix
> Date: 2006-02-15 21:15:32 +0100 (Wed, 15 Feb 2006)
> New Revision: 934
>
> Added:
> xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/image/
> xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/image/ImagePlugin.java
> Modified:
> xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/XWikiDefaultPlugin.java
> xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/XWikiPluginInterface.java
> xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/XWikiPluginManager.java
> xwiki/trunk/src/main/java/com/xpn/xwiki/web/DownloadAction.java
> xwiki/trunk/src/main/web/WEB-INF/xwiki.cfg
> Log:
> Addition of a new plugin to create thumbnails by adding a height parameter at the end of a download URL.
> (There is still a problem with the cache since files aren't removed with flushcache.)
>
>
> Modified: xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/XWikiDefaultPlugin.java
> ===================================================================
> --- xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/XWikiDefaultPlugin.java 2006-02-13 01:38:47 UTC (rev 933)
> +++ xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/XWikiDefaultPlugin.java 2006-02-15 20:15:32 UTC (rev 934)
> @@ -24,6 +24,7 @@
>
> import com.xpn.xwiki.XWikiContext;
> import com.xpn.xwiki.api.Api;
> +import com.xpn.xwiki.doc.XWikiAttachment;
>
> public class XWikiDefaultPlugin implements XWikiPluginInterface {
> private String name;
> @@ -89,4 +90,8 @@
>
> public void endRendering(XWikiContext context) {
> }
> +
> + public XWikiAttachment downloadAttachment(XWikiAttachment image, XWikiContext context) {
> + return image;
> + }
> }
>
> Modified: xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/XWikiPluginInterface.java
> ===================================================================
> --- xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/XWikiPluginInterface.java 2006-02-13 01:38:47 UTC (rev 933)
> +++ xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/XWikiPluginInterface.java 2006-02-15 20:15:32 UTC (rev 934)
> @@ -24,6 +24,7 @@
>
> import com.xpn.xwiki.XWikiContext;
> import com.xpn.xwiki.api.Api;
> +import com.xpn.xwiki.doc.XWikiAttachment;
>
> public interface XWikiPluginInterface {
> String getClassName();
> @@ -53,5 +54,6 @@
> String insidePREHandler(String line, XWikiContext context);
> String endRenderingHandler(String line, XWikiContext context);
> Api getPluginApi(XWikiPluginInterface plugin, XWikiContext context);
> + XWikiAttachment downloadAttachment(XWikiAttachment image, XWikiContext context);
>
> }
>
> Modified: xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/XWikiPluginManager.java
> ===================================================================
> --- xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/XWikiPluginManager.java 2006-02-13 01:38:47 UTC (rev 933)
> +++ xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/XWikiPluginManager.java 2006-02-15 20:15:32 UTC (rev 934)
> @@ -29,6 +29,7 @@
> import org.apache.commons.lang.StringUtils;
>
> import com.xpn.xwiki.XWikiContext;
> +import com.xpn.xwiki.doc.XWikiAttachment;
>
> public class XWikiPluginManager {
> private Vector plugins = new Vector();
> @@ -177,4 +178,14 @@
> }
> }
>
> + public XWikiAttachment downloadAttachment(XWikiAttachment image, XWikiContext context) {
> + for (int i=0;i<plugins.size();i++) {
> + try {
> + image = ((XWikiPluginInterface)plugins_classes.get(plugins.get(i))).downloadAttachment(image, context);
> + } catch (Exception e)
> + {}
> + }
> + return image;
> + }
> +
> }
> \ No newline at end of file
>
> Added: xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/image/ImagePlugin.java
> ===================================================================
> --- xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/image/ImagePlugin.java 2006-02-13 01:38:47 UTC (rev 933)
> +++ xwiki/trunk/src/main/java/com/xpn/xwiki/plugin/image/ImagePlugin.java 2006-02-15 20:15:32 UTC (rev 934)
> @@ -0,0 +1,177 @@
> +/**
> + * XWiki
> + * Copyright (C) 2006 XpertNet
> + * Contact: xwiki-dev at objectweb.org
> + *
> + * This library is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU Lesser General Public
> + * License as published by the Free Software Foundation; either
> + * version 2.1 of the License, or any later version.
> + *
> + * This library is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with this library; if not, write to the Free Software
> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
> + * USA
> + *
> + * @author Xavier MOGHRABI
> + *
> + */
> +
> +package com.xpn.xwiki.plugin.image;
> +
> +import java.awt.Container;
> +import java.awt.Graphics2D;
> +import java.awt.Image;
> +import java.awt.MediaTracker;
> +import java.awt.RenderingHints;
> +import java.awt.Toolkit;
> +import java.awt.image.BufferedImage;
> +import java.io.ByteArrayOutputStream;
> +
> +import javax.imageio.ImageIO;
> +
> +import com.xpn.xwiki.XWikiContext;
> +import com.xpn.xwiki.cache.api.XWikiCache;
> +import com.xpn.xwiki.cache.api.XWikiCacheNeedsRefreshException;
> +import com.xpn.xwiki.cache.impl.OSCacheCache;
> +import com.xpn.xwiki.doc.XWikiAttachment;
> +import com.xpn.xwiki.plugin.PluginException;
> +import com.xpn.xwiki.plugin.XWikiDefaultPlugin;
> +
> +public class ImagePlugin extends XWikiDefaultPlugin {
> + private static final int TYPE_JPG = 1;
> +
> + private static final int TYPE_PNG = 2;
> +
> + private static final int TYPE_BMP = 3;
> +
> + private static String name = "image";
> +
> + private XWikiCache imageCache;
> +
> + private int capacity = 50;
> +
> + public ImagePlugin(String name, String className, XWikiContext context) {
> + super(name, className, context);
> + init(context);
> +
> + }
> +
> + /**
> + * Allow to get the plugin name
> + *
> + * @return plugin name
> + */
> + public String getName() {
> + return name;
> + }
> +
> + public void init(XWikiContext context) {
> + super.init(context);
> + try {
> + String capacityParam = context.getWiki().Param("xwiki.plugin.image.cache.capacity");
> + capacity = Integer.parseInt(capacityParam);
> + } catch (NumberFormatException e) {
> + throw e;
> + } finally {
> + imageCache = new OSCacheCache(capacity, true, "temp/imageCache");
> + }
> +
> + }
> +
> + public void flushCache() {
> + if (imageCache != null)
> + imageCache.flushAll();
> + }
> +
> + public XWikiAttachment downloadAttachment(XWikiAttachment image, XWikiContext context) {
> +
> + int height = 0;
> + XWikiAttachment imageclone = null;
> + try {
> +
> + height = Integer.parseInt(context.getRequest().getParameter("height"));
> +
> + imageclone = (XWikiAttachment) image.clone();
> + String key = imageclone.getId() + "-" + TYPE_PNG + "-" + height;
> +
> + if (imageCache != null) {
> + try {
> + imageclone.setContent((byte []) imageCache.getFromCache(key));
> + } catch (XWikiCacheNeedsRefreshException e) {
> + try {
> + imageclone = this.getImageByHeight(imageclone, height, context);
> + imageCache.putInCache(key, imageclone.getContent(context));
> + } catch (Exception e2) {
> + imageCache.cancelUpdate(key);
> + throw e2;
> + }
> + }
> + } else {
> + imageclone = this.getImageByHeight(imageclone, height, context);
> + }
> + } catch (Exception e) {
> + imageclone = image;
> + } finally {
> + return imageclone;
> + }
> + }
> +
> + public XWikiAttachment getImageByHeight(XWikiAttachment image, int thumbnailHeight, XWikiContext context) throws Exception {
> +
> + if (getType(image.getMimeType(context)) == 0)
> + throw new PluginException(name, PluginException.ERROR_XWIKI_NOT_IMPLEMENTED,
> + "Only JPG, PNG or BMP images are supported.");
> +
> + Toolkit tk = Toolkit.getDefaultToolkit();
> + Image imgOri = tk.createImage(image.getContent(context));
> +
> + MediaTracker mediaTracker = new MediaTracker(new Container());
> + mediaTracker.addImage(imgOri, 0);
> + mediaTracker.waitForID(0);
> +
> + int imgOriWidth = imgOri.getWidth(null);
> + int imgOriHeight = imgOri.getHeight(null);
> +
> + if (thumbnailHeight >= imgOriHeight)
> + throw new PluginException(name, PluginException.ERROR_XWIKI_DIFF_METADATA_ERROR,
> + "Thumbnail image not created: the height is higher than the original one.");
> +
> + double imageRatio = (double) imgOriWidth / (double) imgOriHeight;
> + int thumbnailWidth = (int) (thumbnailHeight * imageRatio);
> +
> + // draw original image to thumbnail image object and
> + // scale it to the new size on-the-fly
> + BufferedImage imgTN = new BufferedImage(thumbnailWidth, thumbnailHeight, BufferedImage.TYPE_INT_RGB);
> + Graphics2D graphics2D = imgTN.createGraphics();
> + graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
> + graphics2D.drawImage(imgOri, 0, 0, thumbnailWidth, thumbnailHeight, null);
> +
> + // save thumbnail image to bout
> + ByteArrayOutputStream bout = new ByteArrayOutputStream();
> + ImageIO.write(imgTN, "PNG", bout);
> +
> +
> + image.setContent(bout.toByteArray());
> +
> + return image;
> + }
> +
> + public static int getType(String mimeType) {
> + if (mimeType.equals("image/jpg"))
> + return TYPE_JPG;
> + if (mimeType.equals("image/jpeg"))
> + return TYPE_JPG;
> + if (mimeType.equals("image/png"))
> + return TYPE_PNG;
> + if (mimeType.equals("image/bmp"))
> + return TYPE_BMP;
> + return 0;
> + }
> +
> +}
>
> Modified: xwiki/trunk/src/main/java/com/xpn/xwiki/web/DownloadAction.java
> ===================================================================
> --- xwiki/trunk/src/main/java/com/xpn/xwiki/web/DownloadAction.java 2006-02-13 01:38:47 UTC (rev 933)
> +++ xwiki/trunk/src/main/java/com/xpn/xwiki/web/DownloadAction.java 2006-02-15 20:15:32 UTC (rev 934)
> @@ -6,6 +6,7 @@
> import com.xpn.xwiki.XWikiException;
> import com.xpn.xwiki.doc.XWikiAttachment;
> import com.xpn.xwiki.doc.XWikiDocument;
> +import com.xpn.xwiki.plugin.XWikiPluginManager;
>
> public class DownloadAction extends XWikiAction {
> public String render(XWikiContext context) throws XWikiException {
> @@ -31,6 +32,8 @@
> "Attachment {0} not found", null, args);
> }
>
> + XWikiPluginManager plugins = context.getWiki().getPluginManager();
> + attachment = plugins.downloadAttachment(attachment, context);
> // Choose the right content type
> String mimetype = attachment.getMimeType(context);
> response.setContentType(mimetype);
>
> Modified: xwiki/trunk/src/main/web/WEB-INF/xwiki.cfg
> ===================================================================
> --- xwiki/trunk/src/main/web/WEB-INF/xwiki.cfg 2006-02-13 01:38:47 UTC (rev 933)
> +++ xwiki/trunk/src/main/web/WEB-INF/xwiki.cfg 2006-02-15 20:15:32 UTC (rev 934)
> @@ -9,7 +9,7 @@
> xwiki.store.cache=1
> xwiki.store.cache.capacity=100
> xwiki.monitor=1
> -xwiki.plugins=com.xpn.xwiki.plugin.calendar.CalendarPlugin,com.xpn.xwiki.plugin.feed.FeedPlugin,com.xpn.xwiki.plugin.ldap.LDAPPlugin,com.xpn.xwiki.plugin.google.GooglePlugin,com.xpn.xwiki.plugin.flickr.FlickrPlugin,com.xpn.xwiki.plugin.mail.MailPlugin,com.xpn.xwiki.plugin.packaging.PackagePlugin,com.xpn.xwiki.plugin.query.QueryPlugin,com.xpn.xwiki.plugin.graphviz.GraphVizPlugin,com.xpn.xwiki.plugin.svg.SVGPlugin,com.xpn.xwiki.plugin.charts.ChartingPlugin,com.xpn.xwiki.plugin.fileupload.FileUploadPlugin,com.xpn.xwiki.plugin.laszlo.LaszloPlugin
> +xwiki.plugins=com.xpn.xwiki.plugin.calendar.CalendarPlugin,com.xpn.xwiki.plugin.feed.FeedPlugin,com.xpn.xwiki.plugin.ldap.LDAPPlugin,com.xpn.xwiki.plugin.google.GooglePlugin,com.xpn.xwiki.plugin.flickr.FlickrPlugin,com.xpn.xwiki.plugin.mail.MailPlugin,com.xpn.xwiki.plugin.packaging.PackagePlugin,com.xpn.xwiki.plugin.query.QueryPlugin,com.xpn.xwiki.plugin.graphviz.GraphVizPlugin,com.xpn.xwiki.plugin.svg.SVGPlugin,com.xpn.xwiki.plugin.charts.ChartingPlugin,com.xpn.xwiki.plugin.fileupload.FileUploadPlugin,com.xpn.xwiki.plugin.laszlo.LaszloPlugin,com.xpn.xwiki.plugin.image.ImagePlugin
>
> # This parameter allows XWiki to operate in Hosting mode
> # allowing to create multiple wikis having their own database
> @@ -40,5 +40,8 @@
>
> xwiki.plugin.laszlo.baseurl=/openlaszlo/xwiki/
> xwiki.plugin.laszlo.path=c:/Program Files/Apache Software Foundation/Tomcat 5.0/webapps/openlaszlo/xwiki/
> +
> +xwiki.plugin.image.cache.capacity=30
> +
> xwiki.authentication.superadminpassword=toto
> xwiki.superadminpassword=toto
>
>
>
>
>
> --
> You receive this message as a subscriber of the xwiki-commits at objectweb.org mailing list.
> To unsubscribe: mailto:xwiki-commits-unsubscribe at objectweb.org
> For general help: mailto:sympa at objectweb.org?subject=help
> ObjectWeb mailing lists service home page: http://www.objectweb.org/wws
>
>
>
--
Blog: http://www.jeremi.info
LinkedIn: https://www.linkedin.com/profile?viewProfile=&key=1437724
http://www.xwiki.org
skype: jeremi23 -- msn et gtalk : jeremi23 at gmail.com
More information about the Xwiki-notifications
mailing list