Author: simoneg
Date: Wed Dec 9 20:34:58 2009
New Revision: 888953
URL: http://svn.apache.org/viewvc?rev=888953&view=rev
Log:
LABS-380 : uploaded image support
Added:
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/beans/
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/beans/MagImage.java
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/beans/image/
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/beans/image/ImageFormat.java
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/beans/image/ImageUtil.java
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/conversion/
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/conversion/image/
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/conversion/image/ImageConverterToString.java
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/validation/
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/validation/validators/
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/validation/validators/InferConsiderOnImageValidated.aj
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/validation/validators/MagUploadImage.java
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/validation/validators/MagUploadImageValidator.java
labs/magma/trunk/beans-image/src/main/resources/META-INF/
labs/magma/trunk/beans-image/src/main/resources/META-INF/magma.default.properties
labs/magma/trunk/beans-image/src/test/java/org/
labs/magma/trunk/beans-image/src/test/java/org/apache/
labs/magma/trunk/beans-image/src/test/java/org/apache/magma/
labs/magma/trunk/beans-image/src/test/java/org/apache/magma/beans/
labs/magma/trunk/beans-image/src/test/java/org/apache/magma/beans/image/
labs/magma/trunk/beans-image/src/test/java/org/apache/magma/beans/image/BeanWithImage.java
labs/magma/trunk/beans-image/src/test/java/org/apache/magma/beans/image/FileTestUtils.java
labs/magma/trunk/beans-image/src/test/java/org/apache/magma/beans/image/TestOnBean.java
labs/magma/trunk/beans-image/src/test/resources/falls_big.jpg (with props)
labs/magma/trunk/beans-image/src/test/resources/falls_micro.jpg (with
props)
labs/magma/trunk/beans-image/src/test/resources/falls_small.jpg (with
props)
Modified:
labs/magma/trunk/beans-image/pom.xml
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/bean/image/ThumbnailMaker.java
Modified: labs/magma/trunk/beans-image/pom.xml
URL:
http://svn.apache.org/viewvc/labs/magma/trunk/beans-image/pom.xml?rev=888953&r1=888952&r2=888953&view=diff
==============================================================================
--- labs/magma/trunk/beans-image/pom.xml (original)
+++ labs/magma/trunk/beans-image/pom.xml Wed Dec 9 20:34:58 2009
@@ -16,6 +16,22 @@
<artifactId>foundation-beans</artifactId>
<version>0.0.3-SNAPSHOT</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.magma</groupId>
+ <artifactId>beans-file</artifactId>
+ <version>0.0.3-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.magma</groupId>
+ <artifactId>foundation-validation</artifactId>
+ <version>0.0.3-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.magma.tools</groupId>
+ <artifactId>magma-test-utilities</artifactId>
+ <version>0.0.3-SNAPSHOT</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
Modified:
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/bean/image/ThumbnailMaker.java
URL:
http://svn.apache.org/viewvc/labs/magma/trunk/beans-image/src/main/java/org/apache/magma/bean/image/ThumbnailMaker.java?rev=888953&r1=888952&r2=888953&view=diff
==============================================================================
---
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/bean/image/ThumbnailMaker.java
(original)
+++
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/bean/image/ThumbnailMaker.java
Wed Dec 9 20:34:58 2009
@@ -14,6 +14,7 @@
*
* @author Simone Gianni <[email protected]>
*/
+// TODO this is going to be removed, replaced by new ImageUtil
public class ThumbnailMaker {
private int maxw = 80;
Added:
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/beans/MagImage.java
URL:
http://svn.apache.org/viewvc/labs/magma/trunk/beans-image/src/main/java/org/apache/magma/beans/MagImage.java?rev=888953&view=auto
==============================================================================
---
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/beans/MagImage.java
(added)
+++
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/beans/MagImage.java
Wed Dec 9 20:34:58 2009
@@ -0,0 +1,25 @@
+package org.apache.magma.beans;
+
+import java.io.File;
+
+import org.apache.magma.beans.MagFile;
+import org.apache.magma.beans.image.ImageUtil;
+
+public class MagImage extends MagFile {
+
+ public MagImage() {
+ super();
+ }
+
+ public MagImage(File temporaryFile, String originalName) {
+ super(temporaryFile, originalName);
+ }
+
+ public MagImage(String spec) {
+ super(spec);
+ }
+
+
+
+
+}
Added:
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/beans/image/ImageFormat.java
URL:
http://svn.apache.org/viewvc/labs/magma/trunk/beans-image/src/main/java/org/apache/magma/beans/image/ImageFormat.java?rev=888953&view=auto
==============================================================================
---
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/beans/image/ImageFormat.java
(added)
+++
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/beans/image/ImageFormat.java
Wed Dec 9 20:34:58 2009
@@ -0,0 +1,75 @@
+package org.apache.magma.beans.image;
+
+public class ImageFormat {
+
+ private int width = -1;
+ private int height = -1;
+ private String format = "png";
+
+ /**
+ * Constructs using a string defined format.
+ *
+ * The format is :
+ * [format] [<width>x<height>]
+ *
+ * So for example "jpg 80x80", "80x80" or "jpg".
+ *
+ * @param def The format
+ */
+ public ImageFormat(String def) {
+ def = def.trim();
+ if (def.indexOf(' ') > 0) {
+ this.format = def.substring(0, def.indexOf(' '));
+ def = def.substring(def.indexOf(' ') + 1);
+ String[] split = def.split("x");
+ this.width = Integer.parseInt(split[0]);
+ this.height = Integer.parseInt(split[1]);
+ } else {
+ if (Character.isDigit(def.charAt(0))) {
+ String[] split = def.split("x");
+ this.width = Integer.parseInt(split[0]);
+ this.height = Integer.parseInt(split[1]);
+ } else {
+ this.format = def;
+ }
+ }
+ }
+
+ /**
+ * Constructs using
+ * @param width
+ * @param height
+ * @param format
+ */
+ public ImageFormat(int width, int height, String format) {
+ this.width = width;
+ this.height = height;
+ this.format = format;
+ }
+
+ public int getWidth() {
+ return width;
+ }
+
+ public void setWidth(int width) {
+ this.width = width;
+ }
+
+ public int getHeight() {
+ return height;
+ }
+
+ public void setHeight(int height) {
+ this.height = height;
+ }
+
+ public String getFormat() {
+ return format;
+ }
+
+ public void setFormat(String format) {
+ this.format = format;
+ }
+
+
+}
Added:
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/beans/image/ImageUtil.java
URL:
http://svn.apache.org/viewvc/labs/magma/trunk/beans-image/src/main/java/org/apache/magma/beans/image/ImageUtil.java?rev=888953&view=auto
==============================================================================
---
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/beans/image/ImageUtil.java
(added)
+++
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/beans/image/ImageUtil.java
Wed Dec 9 20:34:58 2009
@@ -0,0 +1,138 @@
+package org.apache.magma.beans.image;
+
+import java.awt.Image;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.FileInputStream;
+import java.io.InputStream;
+
+import javax.imageio.ImageIO;
+
+import org.apache.magma.basics.MagmaException;
+import org.apache.magma.beans.MagImage;
+
+public class ImageUtil {
+
+ private InputStream data;
+ private BufferedImage img;
+ private int width;
+ private int height;
+
+ public ImageUtil(MagImage img) {
+ if (img.getTemporaryFile() != null) {
+ try {
+ data = new
FileInputStream(img.getTemporaryFile());
+ } catch (Exception e) {
+ throw new MagmaException(e, "Error loading file
from {0}", img.getTemporaryFile().getAbsolutePath());
+ }
+ } else {
+ data = img.getInputStream();
+ }
+ }
+
+ public ImageUtil(InputStream data) {
+ this.data = data;
+ }
+
+ protected void load() {
+ if (img != null) return;
+ try {
+ img = ImageIO.read(data);
+ } catch (Exception e) {
+ throw new MagmaException(e, "Error parsing image");
+ }
+ width = img.getWidth();
+ height = img.getHeight();
+ }
+
+ public int getWidth() {
+ load();
+ return width;
+ }
+
+ public int getHeight() {
+ load();
+ return height;
+ }
+
+ public boolean isBiggerThan(ImageFormat format) {
+ if (format.getHeight() != -1) {
+ if (this.getHeight() < format.getHeight()) return false;
+ }
+ if (format.getWidth() != -1) {
+ if (this.getWidth() < format.getWidth()) return false;
+ }
+ return true;
+ }
+
+ public boolean isSmallerThan(ImageFormat format) {
+ if (format.getHeight() != -1) {
+ if (this.getHeight() > format.getHeight()) return false;
+ }
+ if (format.getWidth() != -1) {
+ if (this.getWidth() > format.getWidth()) return false;
+ }
+ return true;
+ }
+
+ public InputStream resize(ImageFormat format) {
+ load();
+ int prew = getWidth();
+ int preh = getHeight();
+ int maxw = format.getWidth();
+ int maxh = format.getHeight();
+ // scale factor based on width
+ double scalefw = ((double)maxw / (double)prew);
+ // scale factor based on height
+ double scalefh = ((double)maxh / (double)preh);
+ int tgw = -1;
+ int tgh = -1;
+ if (prew > maxw || preh > maxh) {
+ if (scalefw < scalefh) {
+ // we need to scale on width
+ tgw = maxw;
+ } else {
+ // we need to scale on height
+ tgh = maxh;
+ }
+ }
+ Image scaled = img.getScaledInstance(tgw, tgh,
Image.SCALE_SMOOTH);
+ BufferedImage scaledbi = new
BufferedImage(scaled.getWidth(null),
scaled.getHeight(null),BufferedImage.TYPE_INT_RGB);
+ scaledbi.getGraphics().drawImage(scaled, 0, 0, null);
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ try {
+ ImageIO.write(scaledbi, format.getFormat(), baos);
+ } catch (Exception e) {
+ throw new MagmaException(e, "Error rendering resized
image");
+ }
+ return new ByteArrayInputStream(baos.toByteArray());
+ }
+
+ public void resize(MagImage img, ImageFormat fmt) {
+ load();
+ InputStream resize = resize(fmt);
+ String name = img.getOriginalName();
+ if (name != null) {
+ if (name.indexOf('.') != -1) {
+ name = name.substring(0, name.indexOf('.'));
+ }
+ name += "." + fmt.getFormat();
+ img.setOriginalName(name);
+ }
+ img.setInputStream(resize);
+ }
+
+ public void dispose() {
+ try {
+ this.data.close();
+ } catch (Exception e) {}
+ }
+
+ @Override
+ protected void finalize() throws Throwable {
+ this.dispose();
+ super.finalize();
+ }
+
+}
Added:
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/conversion/image/ImageConverterToString.java
URL:
http://svn.apache.org/viewvc/labs/magma/trunk/beans-image/src/main/java/org/apache/magma/conversion/image/ImageConverterToString.java?rev=888953&view=auto
==============================================================================
---
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/conversion/image/ImageConverterToString.java
(added)
+++
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/conversion/image/ImageConverterToString.java
Wed Dec 9 20:34:58 2009
@@ -0,0 +1,77 @@
+package org.apache.magma.conversion.image;
+
+import java.io.File;
+
+import org.apache.magma.basics.MagmaException;
+import org.apache.magma.beans.MagImage;
+import org.apache.magma.beans.MagFile;
+import org.apache.magma.beans.PropertyInfo;
+import org.apache.magma.beans.image.ImageFormat;
+import org.apache.magma.beans.image.ImageUtil;
+import org.apache.magma.conversion.Converter;
+import org.apache.magma.conversion.PropertyAwareConverter;
+import org.apache.magma.conversion.string.BaseConverter;
+import org.apache.magma.settings.Settings;
+import org.apache.magma.validation.CompoundValidator;
+import org.apache.magma.validation.Validator;
+import org.apache.magma.validation.validators.MagUploadImageValidator;
+
+/**
+ * Converts a MagFile to string and back, using a file system store.
+ *
+ * The file system directory for storage is taken from the property
+ * magma.files.store .
+ *
+ * The string format contains the file path in the local store, followed by
the original file name and
+ * mime type.
+ *
+ * @author Simone Gianni <[email protected]>
+ */
+public class ImageConverterToString extends BaseConverter<MagImage> implements
PropertyAwareConverter {
+
+ public ImageConverterToString() {
+ super(MagImage.class);
+ }
+
+ /**
+ * Always returns a new instance, cause being a {...@link
PropertyAwareConverter} means this class is not thread safe.
+ */
+ @Override
+ public Converter<MagImage> build(Class<? extends MagImage> clazz) {
+ return new ImageConverterToString();
+ }
+
+ public MagImage from(String value) {
+ if (value == null || value.length() == 0) return null;
+ MagImage ret = new MagImage(value);
+ return ret;
+ }
+
+ public int getMaximumStringSize() {
+ return 0;
+ }
+
+ public String to(MagImage value) {
+ if (value.isModified()) {
+ PropertyInfo property = this.getProperty();
+ ImageFormat resizeFormat = null;
+ try {
+ CompoundValidator val = property.getValidator();
+ MagUploadImageValidator validator =
(MagUploadImageValidator) val.getValidator(MagUploadImageValidator.class);
+ resizeFormat = validator.getResizeFormat();
+ } catch (NullPointerException e) {}
+ if (resizeFormat != null) {
+ ImageUtil iu = new ImageUtil(value);
+ try {
+ iu.resize(value, resizeFormat);
+ } finally {
+ iu.dispose();
+ }
+ }
+ }
+ value.persist();
+ return value.getSpec();
+ }
+
+
+}
Added:
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/validation/validators/InferConsiderOnImageValidated.aj
URL:
http://svn.apache.org/viewvc/labs/magma/trunk/beans-image/src/main/java/org/apache/magma/validation/validators/InferConsiderOnImageValidated.aj?rev=888953&view=auto
==============================================================================
---
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/validation/validators/InferConsiderOnImageValidated.aj
(added)
+++
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/validation/validators/InferConsiderOnImageValidated.aj
Wed Dec 9 20:34:58 2009
@@ -0,0 +1,13 @@
+package org.apache.magma.validation.validators;
+
+import org.apache.magma.beans.Consider;
+import org.apache.magma.beans.MagImage;
+import org.apache.magma.beans.MagmaBeanSupport;
+
+public aspect InferConsiderOnImageValidated {
+
+ // TODO worked around for AspectJ bug
+ declare @method : (@MagUploadImage !...@consider public *
org.apache.magma.beans.*agmaBeanSupport+.get*()) : @Consider(MagImage.class);
+ declare @method : (@MagUploadImage !...@consider public void
org.apache.magma.beans.*agmaBeanSupport+.set*(..)) : @Consider(MagImage.class);
+
+}
Added:
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/validation/validators/MagUploadImage.java
URL:
http://svn.apache.org/viewvc/labs/magma/trunk/beans-image/src/main/java/org/apache/magma/validation/validators/MagUploadImage.java?rev=888953&view=auto
==============================================================================
---
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/validation/validators/MagUploadImage.java
(added)
+++
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/validation/validators/MagUploadImage.java
Wed Dec 9 20:34:58 2009
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.magma.validation.validators;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import org.apache.magma.beans.Consider;
+import org.apache.magma.beans.MagFile;
+import org.apache.magma.validation.ValidationAnnotation;
+
+/**
+ * Validation for fields marked as {...@link MagFile} using {...@link
Consider}.
+ *
+ * @author Simone Gianni <[email protected]>
+ */
+...@validationannotation
+...@target(ElementType.METHOD)
+...@retention(RetentionPolicy.RUNTIME)
+public @interface MagUploadImage {
+
+ /**
+ * @return The extensions permitted.
+ */
+ public String[] extensions() default {};
+
+ /**
+ * @return Maximum length permitted.
+ */
+ public long maxLength() default Long.MAX_VALUE;
+
+ /**
+ * @return Minimum size, for example "16x16".
+ */
+ public String minSize() default "";
+
+ /**
+ * @return Maximum size, for example "16x16".
+ */
+ public String maxSize() default "";
+
+ /**
+ * @return Resize the image, for example "800x800", optionally also a
format can be specified, like "PNG 800x800"
+ */
+ public String resize() default "";
+
+}
Added:
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/validation/validators/MagUploadImageValidator.java
URL:
http://svn.apache.org/viewvc/labs/magma/trunk/beans-image/src/main/java/org/apache/magma/validation/validators/MagUploadImageValidator.java?rev=888953&view=auto
==============================================================================
---
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/validation/validators/MagUploadImageValidator.java
(added)
+++
labs/magma/trunk/beans-image/src/main/java/org/apache/magma/validation/validators/MagUploadImageValidator.java
Wed Dec 9 20:34:58 2009
@@ -0,0 +1,166 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.magma.validation.validators;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.magma.basics.LocalizableString;
+import org.apache.magma.beans.MagImage;
+import org.apache.magma.beans.PropertyInfo;
+import org.apache.magma.beans.image.ImageFormat;
+import org.apache.magma.beans.image.ImageUtil;
+import org.apache.magma.validation.Validator;
+
+public class MagUploadImageValidator implements Validator<MagImage> {
+
+ private String[] extensions;
+ private long maxLength;
+ private String minSize;
+ private String maxSize;
+ private String resize;
+
+ private ImageFormat maxFormat = null;
+ private ImageFormat minFormat = null;
+ private ImageFormat resizeFormat = null;
+
+
+ public List<LocalizableString> validate(Object bean, PropertyInfo
property, MagImage value) {
+ if (value == null) return null;
+ List<LocalizableString> messages = null;
+ if (extensions != null && extensions.length > 0) {
+ String name = value.getOriginalName();
+ if (name != null) {
+ boolean found = false;
+ for (String ext : this.extensions) {
+ if (name.endsWith("." + ext)) {
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ if (messages == null) messages = new
ArrayList<LocalizableString>();
+ messages.add(new
LocalizableString("Given file is not correct type, please provide one of {0}",
this.extensions));
+ }
+ }
+ }
+ if (value.getLength() != 0) {
+ if (value.getLength() > this.maxLength) {
+ if (messages == null) messages = new
ArrayList<LocalizableString>();
+ messages.add(new LocalizableString("File size
{0} is too much, please provide a file under {1} bytes", value.getLength(),
this.maxLength));
+ }
+ }
+ ImageUtil iu = null;
+ try {
+ if (this.maxFormat != null) {
+ if (iu == null) iu = new ImageUtil(value);
+ if (iu.isBiggerThan(this.maxFormat)) {
+ if (messages == null) messages = new
ArrayList<LocalizableString>();
+ messages.add(new
LocalizableString("Image too big, it is {0}x{1}, while should be smaller than
{2}x{3}", iu.getWidth(), iu.getHeight(), maxFormat.getWidth(),
maxFormat.getHeight()));
+ }
+ }
+ if (this.minFormat != null) {
+ if (iu == null) iu = new ImageUtil(value);
+ if (iu.isSmallerThan(this.minFormat)) {
+ if (messages == null) messages = new
ArrayList<LocalizableString>();
+ messages.add(new
LocalizableString("Image too small, it is {0}x{1}, while should be bigger than
{2}x{3}", iu.getWidth(), iu.getHeight(), minFormat.getWidth(),
minFormat.getHeight()));
+ }
+ }
+ } finally {
+ if (iu != null) iu.dispose();
+ }
+ return messages;
+ }
+
+ public String[] getExtensions() {
+ return extensions;
+ }
+
+ public void setExtensions(String[] extension) {
+ this.extensions = extension;
+ }
+
+ public long getMaxLength() {
+ return maxLength;
+ }
+
+ public void setMaxLength(long maxLength) {
+ this.maxLength = maxLength;
+ }
+
+ public int maxCharacterLength() {
+ return 0;
+ }
+
+ public String getMinSize() {
+ return minSize;
+ }
+
+ public void setMinSize(String minSize) {
+ this.minSize = minSize;
+ if (minSize != null && minSize.length() > 0) {
+ this.minFormat = new ImageFormat(minSize);
+ }
+ }
+
+ public String getMaxSize() {
+ return maxSize;
+ }
+
+ public void setMaxSize(String maxSize) {
+ this.maxSize = maxSize;
+ if (maxSize != null && maxSize.length() > 0) {
+ this.maxFormat = new ImageFormat(maxSize);
+ }
+ }
+
+ public String getResize() {
+ return resize;
+ }
+
+ public void setResize(String resize) {
+ this.resize = resize;
+ if (resize != null && resize.length() > 0) {
+ this.resizeFormat = new ImageFormat(resize);
+ }
+ }
+
+ public ImageFormat getMaxFormat() {
+ return maxFormat;
+ }
+
+ public void setMaxFormat(ImageFormat maxFormat) {
+ this.maxFormat = maxFormat;
+ }
+
+ public ImageFormat getMinFormat() {
+ return minFormat;
+ }
+
+ public void setMinFormat(ImageFormat minFormat) {
+ this.minFormat = minFormat;
+ }
+
+ public ImageFormat getResizeFormat() {
+ return resizeFormat;
+ }
+
+ public void setResizeFormat(ImageFormat resizeFormat) {
+ this.resizeFormat = resizeFormat;
+ }
+
+}
Added:
labs/magma/trunk/beans-image/src/main/resources/META-INF/magma.default.properties
URL:
http://svn.apache.org/viewvc/labs/magma/trunk/beans-image/src/main/resources/META-INF/magma.default.properties?rev=888953&view=auto
==============================================================================
---
labs/magma/trunk/beans-image/src/main/resources/META-INF/magma.default.properties
(added)
+++
labs/magma/trunk/beans-image/src/main/resources/META-INF/magma.default.properties
Wed Dec 9 20:34:58 2009
@@ -0,0 +1,15 @@
+#Licensed to the Apache Software Foundation (ASF) under one or more
+#contributor license agreements. See the NOTICE file distributed with
+#this work for additional information regarding copyright ownership.
+#The ASF licenses this file to You under the Apache License, Version 2.0
+#(the "License"); you may not use this file except in compliance with
+#the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+#Unless required by applicable law or agreed to in writing, software
+#distributed under the License is distributed on an "AS IS" BASIS,
+#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#See the License for the specific language governing permissions and
+#limitations under the License.
+org.apache.magma.conversion.Converter.aimage=org.apache.magma.conversion.image.ImageConverterToString
Added:
labs/magma/trunk/beans-image/src/test/java/org/apache/magma/beans/image/BeanWithImage.java
URL:
http://svn.apache.org/viewvc/labs/magma/trunk/beans-image/src/test/java/org/apache/magma/beans/image/BeanWithImage.java?rev=888953&view=auto
==============================================================================
---
labs/magma/trunk/beans-image/src/test/java/org/apache/magma/beans/image/BeanWithImage.java
(added)
+++
labs/magma/trunk/beans-image/src/test/java/org/apache/magma/beans/image/BeanWithImage.java
Wed Dec 9 20:34:58 2009
@@ -0,0 +1,36 @@
+package org.apache.magma.beans.image;
+
+import org.apache.magma.beans.MagmaBean;
+import org.apache.magma.validation.validators.MagUploadImage;
+
+...@magmabean
+public class BeanWithImage {
+
+ private String name;
+ private String image;
+ private String resizeImage;
+
+ public String getName() {
+ return name;
+ }
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @MagUploadImage(maxSize="100x100", minSize="20x20")
+ public String getImage() {
+ return image;
+ }
+ public void setImage(String image) {
+ this.image = image;
+ }
+
+ @MagUploadImage(minSize="20x20",resize="PNG 150x150")
+ public String getResizeImage() {
+ return resizeImage;
+ }
+ public void setResizeImage(String resizeImage) {
+ this.resizeImage = resizeImage;
+ }
+
+}
Added:
labs/magma/trunk/beans-image/src/test/java/org/apache/magma/beans/image/FileTestUtils.java
URL:
http://svn.apache.org/viewvc/labs/magma/trunk/beans-image/src/test/java/org/apache/magma/beans/image/FileTestUtils.java?rev=888953&view=auto
==============================================================================
---
labs/magma/trunk/beans-image/src/test/java/org/apache/magma/beans/image/FileTestUtils.java
(added)
+++
labs/magma/trunk/beans-image/src/test/java/org/apache/magma/beans/image/FileTestUtils.java
Wed Dec 9 20:34:58 2009
@@ -0,0 +1,44 @@
+package org.apache.magma.beans.image;
+
+import java.io.File;
+
+import org.apache.magma.settings.Settings;
+import org.apache.magma.settings.SettingsHolder;
+
+public class FileTestUtils {
+
+ public File tmpstore = null;
+
+ public void setup() {
+ String tmpdirstr = System.getProperty("java.io.tmpdir");
+ File tmpdir = new File(tmpdirstr);
+ tmpstore = new File(tmpdir, "testfilestore");
+ tmpstore.mkdir();
+ Settings.ftuModifyEntry("magma.files.store",
tmpstore.getAbsolutePath());
+ }
+
+ static privileged aspect SettingsModifier {
+
+ public static void Settings.ftuModifyEntry(String key, String
value) {
+ holder.override(key, value);
+ }
+
+ }
+
+ public void teardown() {
+ recurseDelete(tmpstore);
+ }
+
+ private void recurseDelete(File f) {
+ if (f.isFile()) {
+ f.delete();
+ } else if (f.isDirectory()) {
+ File[] listFiles = f.listFiles();
+ for (File file : listFiles) {
+ recurseDelete(file);
+ }
+ f.delete();
+ }
+ }
+
+}
Added:
labs/magma/trunk/beans-image/src/test/java/org/apache/magma/beans/image/TestOnBean.java
URL:
http://svn.apache.org/viewvc/labs/magma/trunk/beans-image/src/test/java/org/apache/magma/beans/image/TestOnBean.java?rev=888953&view=auto
==============================================================================
---
labs/magma/trunk/beans-image/src/test/java/org/apache/magma/beans/image/TestOnBean.java
(added)
+++
labs/magma/trunk/beans-image/src/test/java/org/apache/magma/beans/image/TestOnBean.java
Wed Dec 9 20:34:58 2009
@@ -0,0 +1,72 @@
+package org.apache.magma.beans.image;
+
+import static org.junit.Assert.*;
+
+import java.io.File;
+import java.net.URL;
+
+import org.apache.magma.beans.BeanData;
+import org.apache.magma.beans.BeanHandler;
+import org.apache.magma.beans.MagImage;
+import org.apache.magma.conversion.image.ImageConverterToString;
+import org.apache.magma.validation.ValidationError;
+import org.junit.Test;
+
+public class TestOnBean {
+
+ @Test(expected=ValidationError.class)
+ public void validationTooSmall() throws Exception {
+ BeanWithImage bwi = new BeanWithImage();
+ BeanHandler bh = bwi.handler();
+
+ MagImage micro = new MagImage(resAsFile("/falls_micro.jpg"),
"fallsmicro.jpg");
+ bh.setValue("image", micro);
+ bh.validate();
+ }
+
+ @Test(expected=ValidationError.class)
+ public void validationTooBig() throws Exception {
+ BeanWithImage bwi = new BeanWithImage();
+ BeanHandler bh = bwi.handler();
+
+ MagImage big = new MagImage(resAsFile("/falls_big.jpg"),
"fallsbig.jpg");
+ bh.setValue("image", big);
+ bh.validate();
+ }
+
+ @Test
+ public void noerror() throws Exception {
+ BeanWithImage bwi = new BeanWithImage();
+ BeanHandler bh = bwi.handler();
+
+ MagImage big = new MagImage(resAsFile("/falls_small.jpg"),
"fallssmall.jpg");
+ bh.setValue("image", big);
+ bh.validate();
+ }
+
+ @Test
+ public void resizing() throws Exception {
+ FileTestUtils ftu = new FileTestUtils();
+ ftu.setup();
+ try {
+ BeanWithImage bwi = new BeanWithImage();
+ BeanData bd = bwi.beanData();
+ ImageConverterToString ico = new
ImageConverterToString();
+ ico.setProperty(bd.getProperty("resizeImage"));
+ MagImage big = new
MagImage(resAsFile("/falls_big.jpg"), "fallsbig.jpg");
+ String spec = ico.to(big);
+ System.out.println(spec);
+ MagImage nbig = ico.from(spec);
+ ImageUtil iu = new ImageUtil(nbig);
+ assertTrue(iu.isSmallerThan(new
ImageFormat("150x150")));
+ } finally {
+ ftu.teardown();
+ }
+ }
+
+ private File resAsFile(String name) throws Exception {
+ URL resource = getClass().getResource(name);
+ return new File(resource.toURI());
+ }
+
+}
Added: labs/magma/trunk/beans-image/src/test/resources/falls_big.jpg
URL:
http://svn.apache.org/viewvc/labs/magma/trunk/beans-image/src/test/resources/falls_big.jpg?rev=888953&view=auto
==============================================================================
Binary file - no diff available.
Propchange: labs/magma/trunk/beans-image/src/test/resources/falls_big.jpg
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: labs/magma/trunk/beans-image/src/test/resources/falls_micro.jpg
URL:
http://svn.apache.org/viewvc/labs/magma/trunk/beans-image/src/test/resources/falls_micro.jpg?rev=888953&view=auto
==============================================================================
Binary file - no diff available.
Propchange: labs/magma/trunk/beans-image/src/test/resources/falls_micro.jpg
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: labs/magma/trunk/beans-image/src/test/resources/falls_small.jpg
URL:
http://svn.apache.org/viewvc/labs/magma/trunk/beans-image/src/test/resources/falls_small.jpg?rev=888953&view=auto
==============================================================================
Binary file - no diff available.
Propchange: labs/magma/trunk/beans-image/src/test/resources/falls_small.jpg
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]