this merges the master head of https://github.com/helma-org/apps-modules-mirror into helma
150 lines
4.6 KiB
JavaScript
150 lines
4.6 KiB
JavaScript
/*
|
|
* Helma License Notice
|
|
*
|
|
* The contents of this file are subject to the Helma License
|
|
* Version 2.0 (the "License"). You may not use this file except in
|
|
* compliance with the License. A copy of the License is available at
|
|
* http://adele.helma.org/download/helma/license.txt
|
|
*
|
|
* Copyright 1998-2006 Helma Software. All Rights Reserved.
|
|
*
|
|
* $RCSfile: Image.js,v $
|
|
* $Author$
|
|
* $Revision$
|
|
* $Date$
|
|
*/
|
|
|
|
/**
|
|
* @fileoverview Methods of the helma.Image module.
|
|
* <br /><br />
|
|
* To use this optional module, its repository needs to be added to the
|
|
* application, for example by calling app.addRepository('modules/helma/Image.js')
|
|
*/
|
|
|
|
if (!global.helma) {
|
|
global.helma = {};
|
|
}
|
|
|
|
/**
|
|
* Returns an Image object, generated from the specified source.
|
|
* <br /><br />
|
|
* If the JIMI package is installed, an instance of
|
|
* helma.image.jimi.JimiGenerator will be returned. Otherwise,
|
|
* if the javax.imageio package is available, an instance of
|
|
* helma.image.imageio.ImageIOGenerator is returned.
|
|
* Additionally, the class of the ImageGenerator implementation
|
|
* to be used can be set using the <code>imageGenerator</code>
|
|
* property in either the app.properties or server.properties
|
|
* file.
|
|
*
|
|
*
|
|
* @param {helma.File|java.io.File|String} arg image source, filename or url
|
|
* @return a new Image object
|
|
* @singleton
|
|
* @see Packages.helma.image.ImageGenerator
|
|
* @see Packages.helma.image.jimi.JimiGenerator
|
|
* @see Packages.helma.image.imageio.ImageIOGenerator
|
|
*/
|
|
helma.Image = function(arg) {
|
|
// according to
|
|
// http://grazia.helma.org/pipermail/helma-dev/2004-June/001253.html
|
|
var generator = Packages.helma.image.ImageGenerator.getInstance();
|
|
return generator.createImage(arg);
|
|
}
|
|
|
|
/** @ignore */
|
|
helma.Image.toString = function() {
|
|
return "[helma.Image]";
|
|
};
|
|
|
|
|
|
/**
|
|
* Returns an ImageInfo object for the specified image file.
|
|
*
|
|
* @param {helma.File|java.io.File|String} arg image source, filename or url
|
|
* @returns an ImageInfo object
|
|
* @memberof helma.Image
|
|
* @see Packages.helma.image.ImageInfo
|
|
*/
|
|
helma.Image.getInfo = function(arg) {
|
|
if (arguments.length != 1) {
|
|
throw new java.lang.IllegalArgumentException(
|
|
"Image.getInfo() expects one argument"
|
|
);
|
|
}
|
|
|
|
var inp, result;
|
|
var info = new Packages.helma.image.ImageInfo();
|
|
// FIXME: we need a byte array for class comparison
|
|
var b = java.lang.reflect.Array.newInstance(java.lang.Byte.TYPE, 0);
|
|
|
|
try {
|
|
if (arg instanceof java.io.InputStream) {
|
|
inp = new java.io.InputStream(arg);
|
|
// FIXME: here comes a dirty hack to check for a byte array
|
|
} else if (arg.getClass && arg.getClass() == b.getClass()) {
|
|
inp = new java.io.ByteArrayInputStream(arg);
|
|
} else if (arg instanceof java.io.File) {
|
|
inp = new java.io.FileInputStream(arg);
|
|
} else if (arg instanceof helma.File) {
|
|
inp = new java.io.FileInputStream(arg.getFile());
|
|
} else if (typeof arg == "string") {
|
|
var str = arg;
|
|
// try to interpret argument as URL if it contains a colon,
|
|
// otherwise or if URL is malformed interpret as file name.
|
|
if (str.indexOf(":") > -1) {
|
|
try {
|
|
var url = new java.net.URL(str);
|
|
inp = url.openStream();
|
|
} catch (mux) {
|
|
inp = new java.io.FileInputStream(str);
|
|
}
|
|
} else {
|
|
inp = new java.io.FileInputStream(str);
|
|
}
|
|
}
|
|
if (inp == null) {
|
|
var msg = "Unrecognized argument in Image.getInfo(): ";
|
|
msg += (arg == null ? "null" : arg.getClass().toString());
|
|
throw new java.lang.IllegalArgumentException(msg);
|
|
}
|
|
info.setInput(inp);
|
|
if (info.check()) {
|
|
result = info;
|
|
}
|
|
} catch (e) {
|
|
// do nothing, returns null later
|
|
} finally {
|
|
if (inp != null) {
|
|
try {
|
|
inp.close();
|
|
} catch (e) {}
|
|
}
|
|
}
|
|
|
|
return result;
|
|
};
|
|
|
|
|
|
/**
|
|
* Writes a 1x1 pixel transparent spacer GIF image to the
|
|
* response buffer and sets the content type to image/gif.
|
|
*
|
|
* @memberof helma.Image
|
|
*/
|
|
helma.Image.spacer = function() {
|
|
res.contentType = "image/gif";
|
|
res.writeBinary([71,73,70,56,57,97,2,0,2,0,-128,-1,0,-64,-64,-64,0,0,0,33,-7,4,1,0,0,0,0,44,0,0,0,0,1,0,1,0,64,2,2,68,1,0,59]);
|
|
return;
|
|
};
|
|
|
|
helma.lib = "Image";
|
|
helma.dontEnum(helma.lib);
|
|
for (var i in helma[helma.lib])
|
|
helma[helma.lib].dontEnum(i);
|
|
for (var i in helma[helma.lib].prototype)
|
|
helma[helma.lib].prototype.dontEnum(i);
|
|
delete helma.lib;
|
|
|
|
|
|
|